flet 0.86.4__tar.gz → 1.0.0.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flet-0.86.4 → flet-1.0.0.dev0}/PKG-INFO +14 -11
- {flet-0.86.4 → flet-1.0.0.dev0}/README.md +5 -2
- {flet-0.86.4 → flet-1.0.0.dev0}/pyproject.toml +9 -9
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/__init__.py +30 -13
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/app.py +39 -42
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/component_owned.py +10 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/hooks/hook.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/hooks/use_context.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/hooks/use_dialog.py +60 -24
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/hooks/use_effect.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/hooks/use_memo.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/hooks/use_ref.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/hooks/use_state.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/observable.py +4 -1
- flet-1.0.0.dev0/src/flet/controls/action_control.py +38 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/base_control.py +23 -14
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/base_page.py +1 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/buttons.py +1 -1
- flet-1.0.0.dev0/src/flet/controls/client_action.py +118 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/colors.py +1 -27
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/context.py +50 -11
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/path.py +1 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/text.py +2 -2
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/drag_target.py +0 -49
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/flet_app.py +0 -57
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/grid_view.py +1 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/icon.py +1 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/semantics.py +1 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/text.py +1 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/text_span.py +2 -2
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_app_bar.py +3 -3
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_button.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_list_tile.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_textfield.py +20 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/layout_control.py +1 -11
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/button.py +3 -2
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/container.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/context_menu.py +3 -3
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/dropdown.py +79 -23
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/dropdownm2.py +28 -8
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/expansion_panel.py +1 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/floating_action_button.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/form_field_control.py +226 -51
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/icon_button.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/list_tile.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/outlined_button.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/text_button.py +2 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/page.py +0 -171
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/painting.py +13 -24
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/clipboard.py +30 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/file_picker.py +118 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/share.py +47 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/url_launcher.py +41 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/types.py +1 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/messaging/connection.py +2 -2
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/messaging/flet_dart_bridge_server.py +10 -10
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/messaging/flet_socket_server.py +10 -10
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/messaging/protocol.py +15 -7
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/messaging/pyodide_connection.py +10 -10
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/messaging/session.py +9 -9
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/testing/flet_test_app.py +6 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/__init__.py +0 -2
- flet-1.0.0.dev0/src/flet/utils/environment.py +38 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/files.py +0 -27
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/version.py +1 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet.egg-info/PKG-INFO +14 -11
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet.egg-info/SOURCES.txt +9 -1
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet.egg-info/requires.txt +8 -8
- flet-1.0.0.dev0/tests/test_assets_dir_resolution.py +117 -0
- flet-1.0.0.dev0/tests/test_client_actions.py +111 -0
- flet-1.0.0.dev0/tests/test_component_owned_identity.py +120 -0
- flet-1.0.0.dev0/tests/test_context_auto_update.py +124 -0
- flet-1.0.0.dev0/tests/test_environment.py +70 -0
- flet-1.0.0.dev0/tests/test_generator_handler_yield.py +161 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_session_disconnect_buffering.py +4 -4
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_use_dialog.py +83 -2
- flet-0.86.4/src/flet/controls/material/elevated_button.py +0 -13
- {flet-0.86.4 → flet-1.0.0.dev0}/setup.cfg +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/authorization.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/authorization_service.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/group.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/oauth_provider.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/oauth_token.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/providers/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/providers/auth0_oauth_provider.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/providers/azure_oauth_provider.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/providers/github_oauth_provider.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/providers/google_oauth_provider.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/auth/user.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/canvas/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/cli.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/component.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/component_decorator.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/hooks/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/hooks/use_callback.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/memo.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/public_utils.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/router.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/components/utils.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/adaptive_control.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/alignment.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/animation.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/blur.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/border.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/border_radius.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/box.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/control.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/control_event.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/control_state.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/animated_switcher.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/autofill_group.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/arc.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/canvas.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/circle.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/color.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/fill.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/image.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/line.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/oval.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/points.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/rect.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/shadow.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/canvas/shape.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/column.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/dismissible.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/draggable.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/gesture_detector.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/hero.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/image.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/interactive_viewer.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/keyboard_listener.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/list_view.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/markdown.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/merge_semantics.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/page_view.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/pagelet.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/placeholder.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/raw_image.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/reorderable_drag_handle.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/responsive_row.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/rotated_box.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/row.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/safe_area.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/screenshot.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/shader_mask.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/shimmer.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/stack.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/transparent_pointer.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/view.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/window.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/core/window_drag_area.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_action_sheet.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_action_sheet_action.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_activity_indicator.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_alert_dialog.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_bottom_sheet.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_checkbox.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_colors.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_context_menu.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_context_menu_action.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_date_picker.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_dialog_action.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_filled_button.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_icons.json +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_icons.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_icons.pyi +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_navigation_bar.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_picker.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_radio.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_segmented_button.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_slider.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_sliding_segmented_button.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_switch.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_timer_picker.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/cupertino/cupertino_tinted_button.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/device_info.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/dialog_control.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/duration.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/embed_json_encoder.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/events.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/exceptions.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/geometry.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/gradients.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/icon_data.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/id_counter.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/keys.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/margin.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/alert_dialog.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/app_bar.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/auto_complete.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/badge.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/banner.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/bottom_app_bar.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/bottom_sheet.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/card.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/checkbox.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/chip.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/circle_avatar.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/datatable.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/date_picker.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/date_range_picker.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/divider.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/expansion_tile.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/filled_button.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/filled_tonal_button.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/icons.json +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/icons.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/icons.pyi +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/menu_bar.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/menu_item_button.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/navigation_bar.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/navigation_drawer.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/navigation_rail.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/popup_menu_button.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/progress_bar.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/progress_ring.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/radio.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/radio_group.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/range_slider.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/reorderable_list_view.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/search_bar.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/segmented_button.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/selection_area.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/slider.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/snack_bar.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/submenu_button.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/switch.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/tabs.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/textfield.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/time_picker.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/tooltip.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/material/vertical_divider.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/multi_view.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/object_patch.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/padding.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/query_string.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/ref.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/scrollable_control.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/accelerometer.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/barometer.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/battery.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/browser_context_menu.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/connectivity.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/gyroscope.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/haptic_feedback.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/magnetometer.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/screen_brightness.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/semantics_service.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/sensor_error_event.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/service.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/shake_detector.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/shared_preferences.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/storage_paths.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/user_accelerometer.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/services/wakelock.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/template_route.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/text_style.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/theme.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/transform.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/controls/value_types.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/data_channel.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/fastapi/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/messaging/session_store.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/pubsub/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/pubsub/pubsub_client.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/pubsub/pubsub_hub.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/py.typed +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/pytest_plugin.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/security/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/testing/__init__.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/testing/finder.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/testing/remote_tester.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/testing/tester.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/browser.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/classproperty.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/deprecated.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/deprecated_enum.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/from_dict.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/griffe_deprecations.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/hashing.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/json_utils.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/locks.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/network.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/object_model.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/once.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/pip.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/platform_utils.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/slugify.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/strings.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/typing_utils.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/validation.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet/utils/vector.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet.egg-info/dependency_links.txt +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet.egg-info/entry_points.txt +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/src/flet.egg-info/top_level.txt +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_auth_lazy_imports.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_base_control.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_colors.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_component_diff.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_component_effects.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_component_renderer.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_dataclasses.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_datetime.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_deprecated.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_events.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_from_dict.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_griffe_deprecations.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_icons.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_object_diff_frozen.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_object_diff_in_place.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_object_diff_memory_churn.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_object_diff_performance.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_observable.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_patch_dataclass.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_raw_image_pixels.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_router_modal.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_router_pop.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_router_recursive.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_skip_double_update.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_validation.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_validation_benchmark.py +0 -0
- {flet-0.86.4 → flet-1.0.0.dev0}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flet
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0.dev0
|
|
4
4
|
Summary: Flet for Python - easily build interactive multi-platform apps in Python
|
|
5
5
|
Author-email: "Appveyor Systems Inc." <hello@flet.dev>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -9,23 +9,23 @@ Project-URL: Repository, https://github.com/flet-dev/flet
|
|
|
9
9
|
Project-URL: Documentation, https://flet.dev/docs/
|
|
10
10
|
Requires-Python: >=3.10
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
|
-
Requires-Dist: flet-cli==0.
|
|
13
|
-
Requires-Dist: flet-web==0.
|
|
12
|
+
Requires-Dist: flet-cli==1.0.0.dev0; extra == "cli"
|
|
13
|
+
Requires-Dist: flet-web==1.0.0.dev0; extra == "web"
|
|
14
14
|
Requires-Dist: oauthlib>=3.2.2; platform_system != "Emscripten"
|
|
15
15
|
Requires-Dist: httpx>=0.28.1; platform_system != "Emscripten"
|
|
16
16
|
Requires-Dist: repath>=0.9.0
|
|
17
17
|
Requires-Dist: msgpack>=1.1.0
|
|
18
18
|
Requires-Dist: typing-extensions; python_version < "3.11"
|
|
19
19
|
Provides-Extra: all
|
|
20
|
-
Requires-Dist: flet-cli==0.
|
|
21
|
-
Requires-Dist: flet-web==0.
|
|
22
|
-
Requires-Dist: flet-desktop==0.
|
|
20
|
+
Requires-Dist: flet-cli==1.0.0.dev0; extra == "all"
|
|
21
|
+
Requires-Dist: flet-web==1.0.0.dev0; extra == "all"
|
|
22
|
+
Requires-Dist: flet-desktop==1.0.0.dev0; extra == "all"
|
|
23
23
|
Provides-Extra: cli
|
|
24
|
-
Requires-Dist: flet-cli==0.
|
|
24
|
+
Requires-Dist: flet-cli==1.0.0.dev0; extra == "cli"
|
|
25
25
|
Provides-Extra: desktop
|
|
26
|
-
Requires-Dist: flet-desktop==0.
|
|
26
|
+
Requires-Dist: flet-desktop==1.0.0.dev0; extra == "desktop"
|
|
27
27
|
Provides-Extra: web
|
|
28
|
-
Requires-Dist: flet-web==0.
|
|
28
|
+
Requires-Dist: flet-web==1.0.0.dev0; extra == "web"
|
|
29
29
|
Provides-Extra: test
|
|
30
30
|
Requires-Dist: pytest>=7.2.0; extra == "test"
|
|
31
31
|
Requires-Dist: pytest-asyncio>=1.1.0; extra == "test"
|
|
@@ -34,7 +34,10 @@ Requires-Dist: pillow>=10.3.0; extra == "test"
|
|
|
34
34
|
Requires-Dist: scikit-image>=0.25.2; extra == "test"
|
|
35
35
|
|
|
36
36
|
<p align="center">
|
|
37
|
-
<a href="https://flet.dev"><
|
|
37
|
+
<a href="https://flet.dev"><picture>
|
|
38
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/flet-dev/flet/refs/heads/main/media/logo/flet-logo-dark.svg">
|
|
39
|
+
<img src="https://raw.githubusercontent.com/flet-dev/flet/refs/heads/main/media/logo/flet-logo.svg" height="150" alt="Flet logo">
|
|
40
|
+
</picture></a>
|
|
38
41
|
</p>
|
|
39
42
|
|
|
40
43
|
<p align="center">
|
|
@@ -163,7 +166,7 @@ flet run --web counter.py
|
|
|
163
166
|
* [Website](https://flet.dev)
|
|
164
167
|
* [Documentation](https://flet.dev/docs/)
|
|
165
168
|
* [Roadmap](https://flet.dev/roadmap)
|
|
166
|
-
* [Apps Gallery](https://flet.dev/gallery)
|
|
169
|
+
* [Apps Gallery](https://studio.flet.dev/gallery)
|
|
167
170
|
|
|
168
171
|
## Community
|
|
169
172
|
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="https://flet.dev"><
|
|
2
|
+
<a href="https://flet.dev"><picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/flet-dev/flet/refs/heads/main/media/logo/flet-logo-dark.svg">
|
|
4
|
+
<img src="https://raw.githubusercontent.com/flet-dev/flet/refs/heads/main/media/logo/flet-logo.svg" height="150" alt="Flet logo">
|
|
5
|
+
</picture></a>
|
|
3
6
|
</p>
|
|
4
7
|
|
|
5
8
|
<p align="center">
|
|
@@ -128,7 +131,7 @@ flet run --web counter.py
|
|
|
128
131
|
* [Website](https://flet.dev)
|
|
129
132
|
* [Documentation](https://flet.dev/docs/)
|
|
130
133
|
* [Roadmap](https://flet.dev/roadmap)
|
|
131
|
-
* [Apps Gallery](https://flet.dev/gallery)
|
|
134
|
+
* [Apps Gallery](https://studio.flet.dev/gallery)
|
|
132
135
|
|
|
133
136
|
## Community
|
|
134
137
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "flet"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "1.0.0.dev0"
|
|
4
4
|
description = "Flet for Python - easily build interactive multi-platform apps in Python"
|
|
5
5
|
authors = [{name = "Appveyor Systems Inc.", email = "hello@flet.dev"}]
|
|
6
6
|
license = "Apache-2.0"
|
|
7
7
|
readme = "README.md"
|
|
8
8
|
requires-python = ">=3.10"
|
|
9
9
|
dependencies = [
|
|
10
|
-
"flet-cli==0.
|
|
11
|
-
"flet-web==0.
|
|
10
|
+
"flet-cli==1.0.0.dev0; extra == 'cli'",
|
|
11
|
+
"flet-web==1.0.0.dev0; extra == 'web'",
|
|
12
12
|
"oauthlib >=3.2.2; platform_system != 'Emscripten'",
|
|
13
13
|
"httpx >=0.28.1; platform_system != 'Emscripten'",
|
|
14
14
|
"repath >=0.9.0",
|
|
@@ -23,15 +23,15 @@ Documentation = "https://flet.dev/docs/"
|
|
|
23
23
|
|
|
24
24
|
[project.optional-dependencies]
|
|
25
25
|
all = [
|
|
26
|
-
"flet-cli==0.
|
|
27
|
-
"flet-web==0.
|
|
28
|
-
"flet-desktop==0.
|
|
26
|
+
"flet-cli==1.0.0.dev0",
|
|
27
|
+
"flet-web==1.0.0.dev0",
|
|
28
|
+
"flet-desktop==1.0.0.dev0",
|
|
29
29
|
]
|
|
30
|
-
cli = ["flet-cli==0.
|
|
30
|
+
cli = ["flet-cli==1.0.0.dev0"]
|
|
31
31
|
desktop = [
|
|
32
|
-
"flet-desktop==0.
|
|
32
|
+
"flet-desktop==1.0.0.dev0",
|
|
33
33
|
]
|
|
34
|
-
web = ["flet-web==0.
|
|
34
|
+
web = ["flet-web==1.0.0.dev0"]
|
|
35
35
|
# Dependencies needed to run integration tests written with `flet.testing`
|
|
36
36
|
# (the `flet test` command / the pytest plugin). Pillow/numpy/scikit-image
|
|
37
37
|
# back screenshot and GIF comparison.
|
|
@@ -9,8 +9,6 @@ from flet.version import flet_version as __version__
|
|
|
9
9
|
if TYPE_CHECKING:
|
|
10
10
|
from flet.app import (
|
|
11
11
|
AppCallable,
|
|
12
|
-
app,
|
|
13
|
-
app_async,
|
|
14
12
|
run,
|
|
15
13
|
run_async,
|
|
16
14
|
)
|
|
@@ -56,6 +54,7 @@ if TYPE_CHECKING:
|
|
|
56
54
|
margin,
|
|
57
55
|
padding,
|
|
58
56
|
)
|
|
57
|
+
from flet.controls.action_control import ActionControl
|
|
59
58
|
from flet.controls.adaptive_control import AdaptiveControl
|
|
60
59
|
from flet.controls.alignment import (
|
|
61
60
|
Alignment,
|
|
@@ -116,6 +115,7 @@ if TYPE_CHECKING:
|
|
|
116
115
|
ShapeBorder,
|
|
117
116
|
StadiumBorder,
|
|
118
117
|
)
|
|
118
|
+
from flet.controls.client_action import ClientAction
|
|
119
119
|
from flet.controls.colors import Colors
|
|
120
120
|
from flet.controls.context import (
|
|
121
121
|
Context,
|
|
@@ -334,7 +334,6 @@ if TYPE_CHECKING:
|
|
|
334
334
|
ValueKey,
|
|
335
335
|
)
|
|
336
336
|
from flet.controls.layout_control import (
|
|
337
|
-
ConstrainedControl,
|
|
338
337
|
LayoutControl,
|
|
339
338
|
LayoutSizeChangeEvent,
|
|
340
339
|
)
|
|
@@ -396,7 +395,6 @@ if TYPE_CHECKING:
|
|
|
396
395
|
DropdownOption,
|
|
397
396
|
)
|
|
398
397
|
from flet.controls.material.dropdownm2 import DropdownM2
|
|
399
|
-
from flet.controls.material.elevated_button import ElevatedButton
|
|
400
398
|
from flet.controls.material.expansion_panel import (
|
|
401
399
|
ExpansionPanel,
|
|
402
400
|
ExpansionPanelList,
|
|
@@ -412,6 +410,9 @@ if TYPE_CHECKING:
|
|
|
412
410
|
from flet.controls.material.form_field_control import (
|
|
413
411
|
FormFieldControl,
|
|
414
412
|
InputBorder,
|
|
413
|
+
NoInputBorder,
|
|
414
|
+
OutlineInputBorder,
|
|
415
|
+
UnderlineInputBorder,
|
|
415
416
|
)
|
|
416
417
|
from flet.controls.material.icon_button import (
|
|
417
418
|
FilledIconButton,
|
|
@@ -559,7 +560,7 @@ if TYPE_CHECKING:
|
|
|
559
560
|
BatteryStateChangeEvent,
|
|
560
561
|
)
|
|
561
562
|
from flet.controls.services.browser_context_menu import BrowserContextMenu
|
|
562
|
-
from flet.controls.services.clipboard import Clipboard
|
|
563
|
+
from flet.controls.services.clipboard import Clipboard, CopyToClipboard
|
|
563
564
|
from flet.controls.services.connectivity import (
|
|
564
565
|
Connectivity,
|
|
565
566
|
ConnectivityChangeEvent,
|
|
@@ -569,8 +570,10 @@ if TYPE_CHECKING:
|
|
|
569
570
|
FilePicker,
|
|
570
571
|
FilePickerFile,
|
|
571
572
|
FilePickerFileType,
|
|
573
|
+
FilePickerResultEvent,
|
|
572
574
|
FilePickerUploadEvent,
|
|
573
575
|
FilePickerUploadFile,
|
|
576
|
+
PickFiles,
|
|
574
577
|
)
|
|
575
578
|
from flet.controls.services.gyroscope import (
|
|
576
579
|
Gyroscope,
|
|
@@ -598,12 +601,14 @@ if TYPE_CHECKING:
|
|
|
598
601
|
ShareFile,
|
|
599
602
|
ShareResult,
|
|
600
603
|
ShareResultStatus,
|
|
604
|
+
ShareText,
|
|
601
605
|
)
|
|
602
606
|
from flet.controls.services.shared_preferences import SharedPreferences
|
|
603
607
|
from flet.controls.services.storage_paths import StoragePaths
|
|
604
608
|
from flet.controls.services.url_launcher import (
|
|
605
609
|
BrowserConfiguration,
|
|
606
610
|
LaunchMode,
|
|
611
|
+
OpenUrl,
|
|
607
612
|
UrlLauncher,
|
|
608
613
|
WebViewConfiguration,
|
|
609
614
|
)
|
|
@@ -731,6 +736,7 @@ if TYPE_CHECKING:
|
|
|
731
736
|
__all__ = [
|
|
732
737
|
"Accelerometer",
|
|
733
738
|
"AccelerometerReadingEvent",
|
|
739
|
+
"ActionControl",
|
|
734
740
|
"AdaptiveControl",
|
|
735
741
|
"AlertDialog",
|
|
736
742
|
"Alignment",
|
|
@@ -808,6 +814,7 @@ __all__ = [
|
|
|
808
814
|
"CircleAvatar",
|
|
809
815
|
"CircleBorder",
|
|
810
816
|
"CircularRectangleNotchShape",
|
|
817
|
+
"ClientAction",
|
|
811
818
|
"ClipBehavior",
|
|
812
819
|
"Clipboard",
|
|
813
820
|
"ColorFilter",
|
|
@@ -819,7 +826,6 @@ __all__ = [
|
|
|
819
826
|
"Connectivity",
|
|
820
827
|
"ConnectivityChangeEvent",
|
|
821
828
|
"ConnectivityType",
|
|
822
|
-
"ConstrainedControl",
|
|
823
829
|
"Container",
|
|
824
830
|
"Context",
|
|
825
831
|
"ContextMenu",
|
|
@@ -833,6 +839,7 @@ __all__ = [
|
|
|
833
839
|
"ControlEventHandler",
|
|
834
840
|
"ControlState",
|
|
835
841
|
"ControlStateValue",
|
|
842
|
+
"CopyToClipboard",
|
|
836
843
|
"CrossAxisAlignment",
|
|
837
844
|
"CupertinoActionSheet",
|
|
838
845
|
"CupertinoActionSheetAction",
|
|
@@ -905,7 +912,6 @@ __all__ = [
|
|
|
905
912
|
"DropdownTheme",
|
|
906
913
|
"Duration",
|
|
907
914
|
"DurationValue",
|
|
908
|
-
"ElevatedButton",
|
|
909
915
|
"Event",
|
|
910
916
|
"EventControlType",
|
|
911
917
|
"EventHandler",
|
|
@@ -917,6 +923,7 @@ __all__ = [
|
|
|
917
923
|
"FilePicker",
|
|
918
924
|
"FilePickerFile",
|
|
919
925
|
"FilePickerFileType",
|
|
926
|
+
"FilePickerResultEvent",
|
|
920
927
|
"FilePickerUploadEvent",
|
|
921
928
|
"FilePickerUploadFile",
|
|
922
929
|
"FilledButton",
|
|
@@ -1022,6 +1029,7 @@ __all__ = [
|
|
|
1022
1029
|
"NavigationRailDestination",
|
|
1023
1030
|
"NavigationRailLabelType",
|
|
1024
1031
|
"NavigationRailTheme",
|
|
1032
|
+
"NoInputBorder",
|
|
1025
1033
|
"NotchShape",
|
|
1026
1034
|
"Number",
|
|
1027
1035
|
"NumbersOnlyInputFilter",
|
|
@@ -1030,7 +1038,9 @@ __all__ = [
|
|
|
1030
1038
|
"OffsetValue",
|
|
1031
1039
|
"OnReorderEvent",
|
|
1032
1040
|
"OnScrollEvent",
|
|
1041
|
+
"OpenUrl",
|
|
1033
1042
|
"Orientation",
|
|
1043
|
+
"OutlineInputBorder",
|
|
1034
1044
|
"OutlinedBorder",
|
|
1035
1045
|
"OutlinedButton",
|
|
1036
1046
|
"OutlinedButtonTheme",
|
|
@@ -1052,6 +1062,7 @@ __all__ = [
|
|
|
1052
1062
|
"PaintRadialGradient",
|
|
1053
1063
|
"PaintSweepGradient",
|
|
1054
1064
|
"PaintingStyle",
|
|
1065
|
+
"PickFiles",
|
|
1055
1066
|
"Placeholder",
|
|
1056
1067
|
"PlatformBrightnessChangeEvent",
|
|
1057
1068
|
"PointerDeviceType",
|
|
@@ -1125,6 +1136,7 @@ __all__ = [
|
|
|
1125
1136
|
"ShareFile",
|
|
1126
1137
|
"ShareResult",
|
|
1127
1138
|
"ShareResultStatus",
|
|
1139
|
+
"ShareText",
|
|
1128
1140
|
"SharedPreferences",
|
|
1129
1141
|
"Shimmer",
|
|
1130
1142
|
"ShimmerDirection",
|
|
@@ -1195,6 +1207,7 @@ __all__ = [
|
|
|
1195
1207
|
"TooltipValue",
|
|
1196
1208
|
"Transform",
|
|
1197
1209
|
"TransparentPointer",
|
|
1210
|
+
"UnderlineInputBorder",
|
|
1198
1211
|
"UnderlineTabIndicator",
|
|
1199
1212
|
"Url",
|
|
1200
1213
|
"UrlLauncher",
|
|
@@ -1222,8 +1235,6 @@ __all__ = [
|
|
|
1222
1235
|
"WindowsDeviceInfo",
|
|
1223
1236
|
"__version__",
|
|
1224
1237
|
"alignment",
|
|
1225
|
-
"app",
|
|
1226
|
-
"app_async",
|
|
1227
1238
|
"border",
|
|
1228
1239
|
"border_radius",
|
|
1229
1240
|
"component",
|
|
@@ -1265,6 +1276,7 @@ __all__ = [
|
|
|
1265
1276
|
_LAZY = {
|
|
1266
1277
|
"Accelerometer": "flet.controls.services.accelerometer",
|
|
1267
1278
|
"AccelerometerReadingEvent": "flet.controls.services.accelerometer",
|
|
1279
|
+
"ActionControl": "flet.controls.action_control",
|
|
1268
1280
|
"AdaptiveControl": "flet.controls.adaptive_control",
|
|
1269
1281
|
"AlertDialog": "flet.controls.material.alert_dialog",
|
|
1270
1282
|
"Alignment": "flet.controls.alignment",
|
|
@@ -1342,6 +1354,7 @@ _LAZY = {
|
|
|
1342
1354
|
"CircleAvatar": "flet.controls.material.circle_avatar",
|
|
1343
1355
|
"CircleBorder": "flet.controls.buttons",
|
|
1344
1356
|
"CircularRectangleNotchShape": "flet.controls.types",
|
|
1357
|
+
"ClientAction": "flet.controls.client_action",
|
|
1345
1358
|
"ClipBehavior": "flet.controls.types",
|
|
1346
1359
|
"Clipboard": "flet.controls.services.clipboard",
|
|
1347
1360
|
"ColorFilter": "flet.controls.box",
|
|
@@ -1353,7 +1366,6 @@ _LAZY = {
|
|
|
1353
1366
|
"Connectivity": "flet.controls.services.connectivity",
|
|
1354
1367
|
"ConnectivityChangeEvent": "flet.controls.services.connectivity",
|
|
1355
1368
|
"ConnectivityType": "flet.controls.services.connectivity",
|
|
1356
|
-
"ConstrainedControl": "flet.controls.layout_control",
|
|
1357
1369
|
"Container": "flet.controls.material.container",
|
|
1358
1370
|
"Context": "flet.controls.context",
|
|
1359
1371
|
"ContextMenu": "flet.controls.material.context_menu",
|
|
@@ -1367,6 +1379,7 @@ _LAZY = {
|
|
|
1367
1379
|
"ControlEventHandler": "flet.controls.control_event",
|
|
1368
1380
|
"ControlState": "flet.controls.control_state",
|
|
1369
1381
|
"ControlStateValue": "flet.controls.control_state",
|
|
1382
|
+
"CopyToClipboard": "flet.controls.services.clipboard",
|
|
1370
1383
|
"CrossAxisAlignment": "flet.controls.types",
|
|
1371
1384
|
"CupertinoActionSheet": "flet.controls.cupertino.cupertino_action_sheet",
|
|
1372
1385
|
"CupertinoActionSheetAction": "flet.controls.cupertino.cupertino_action_sheet_action", # noqa: E501
|
|
@@ -1439,7 +1452,6 @@ _LAZY = {
|
|
|
1439
1452
|
"DropdownTheme": "flet.controls.theme",
|
|
1440
1453
|
"Duration": "flet.controls.duration",
|
|
1441
1454
|
"DurationValue": "flet.controls.duration",
|
|
1442
|
-
"ElevatedButton": "flet.controls.material.elevated_button",
|
|
1443
1455
|
"Event": "flet.controls.control_event",
|
|
1444
1456
|
"EventControlType": "flet.controls.control_event",
|
|
1445
1457
|
"EventHandler": "flet.controls.control_event",
|
|
@@ -1451,6 +1463,7 @@ _LAZY = {
|
|
|
1451
1463
|
"FilePicker": "flet.controls.services.file_picker",
|
|
1452
1464
|
"FilePickerFile": "flet.controls.services.file_picker",
|
|
1453
1465
|
"FilePickerFileType": "flet.controls.services.file_picker",
|
|
1466
|
+
"FilePickerResultEvent": "flet.controls.services.file_picker",
|
|
1454
1467
|
"FilePickerUploadEvent": "flet.controls.services.file_picker",
|
|
1455
1468
|
"FilePickerUploadFile": "flet.controls.services.file_picker",
|
|
1456
1469
|
"FilledButton": "flet.controls.material.filled_button",
|
|
@@ -1556,6 +1569,7 @@ _LAZY = {
|
|
|
1556
1569
|
"NavigationRailDestination": "flet.controls.material.navigation_rail",
|
|
1557
1570
|
"NavigationRailLabelType": "flet.controls.material.navigation_rail",
|
|
1558
1571
|
"NavigationRailTheme": "flet.controls.theme",
|
|
1572
|
+
"NoInputBorder": "flet.controls.material.form_field_control",
|
|
1559
1573
|
"NotchShape": "flet.controls.types",
|
|
1560
1574
|
"Number": "flet.controls.types",
|
|
1561
1575
|
"NumbersOnlyInputFilter": "flet.controls.material.textfield",
|
|
@@ -1564,7 +1578,9 @@ _LAZY = {
|
|
|
1564
1578
|
"OffsetValue": "flet.controls.transform",
|
|
1565
1579
|
"OnReorderEvent": "flet.controls.material.reorderable_list_view",
|
|
1566
1580
|
"OnScrollEvent": "flet.controls.scrollable_control",
|
|
1581
|
+
"OpenUrl": "flet.controls.services.url_launcher",
|
|
1567
1582
|
"Orientation": "flet.controls.types",
|
|
1583
|
+
"OutlineInputBorder": "flet.controls.material.form_field_control",
|
|
1568
1584
|
"OutlinedBorder": "flet.controls.buttons",
|
|
1569
1585
|
"OutlinedButton": "flet.controls.material.outlined_button",
|
|
1570
1586
|
"OutlinedButtonTheme": "flet.controls.theme",
|
|
@@ -1586,6 +1602,7 @@ _LAZY = {
|
|
|
1586
1602
|
"PaintRadialGradient": "flet.controls.painting",
|
|
1587
1603
|
"PaintSweepGradient": "flet.controls.painting",
|
|
1588
1604
|
"PaintingStyle": "flet.controls.painting",
|
|
1605
|
+
"PickFiles": "flet.controls.services.file_picker",
|
|
1589
1606
|
"Placeholder": "flet.controls.core.placeholder",
|
|
1590
1607
|
"PlatformBrightnessChangeEvent": "flet.controls.page",
|
|
1591
1608
|
"PointerDeviceType": "flet.controls.types",
|
|
@@ -1659,6 +1676,7 @@ _LAZY = {
|
|
|
1659
1676
|
"ShareFile": "flet.controls.services.share",
|
|
1660
1677
|
"ShareResult": "flet.controls.services.share",
|
|
1661
1678
|
"ShareResultStatus": "flet.controls.services.share",
|
|
1679
|
+
"ShareText": "flet.controls.services.share",
|
|
1662
1680
|
"SharedPreferences": "flet.controls.services.shared_preferences",
|
|
1663
1681
|
"Shimmer": "flet.controls.core.shimmer",
|
|
1664
1682
|
"ShimmerDirection": "flet.controls.core.shimmer",
|
|
@@ -1729,6 +1747,7 @@ _LAZY = {
|
|
|
1729
1747
|
"TooltipValue": "flet.controls.material.tooltip",
|
|
1730
1748
|
"Transform": "flet.controls.transform",
|
|
1731
1749
|
"TransparentPointer": "flet.controls.core.transparent_pointer",
|
|
1750
|
+
"UnderlineInputBorder": "flet.controls.material.form_field_control",
|
|
1732
1751
|
"UnderlineTabIndicator": "flet.controls.material.tabs",
|
|
1733
1752
|
"Url": "flet.controls.types",
|
|
1734
1753
|
"UrlLauncher": "flet.controls.services.url_launcher",
|
|
@@ -1755,8 +1774,6 @@ _LAZY = {
|
|
|
1755
1774
|
"WindowResizeEdge": "flet.controls.core.window",
|
|
1756
1775
|
"WindowsDeviceInfo": "flet.controls.device_info",
|
|
1757
1776
|
"alignment": "flet.controls",
|
|
1758
|
-
"app": "flet.app",
|
|
1759
|
-
"app_async": "flet.app",
|
|
1760
1777
|
"border": "flet.controls",
|
|
1761
1778
|
"border_radius": "flet.controls",
|
|
1762
1779
|
"component": "flet.components.component_decorator",
|
|
@@ -23,7 +23,6 @@ from flet.utils import (
|
|
|
23
23
|
is_pyodide,
|
|
24
24
|
open_in_browser,
|
|
25
25
|
)
|
|
26
|
-
from flet.utils.deprecated import deprecated
|
|
27
26
|
from flet.utils.pip import (
|
|
28
27
|
ensure_flet_desktop_package_installed,
|
|
29
28
|
ensure_flet_web_package_installed,
|
|
@@ -31,6 +30,11 @@ from flet.utils.pip import (
|
|
|
31
30
|
|
|
32
31
|
logger = logging.getLogger("flet")
|
|
33
32
|
|
|
33
|
+
#: Conventional assets directory name, used as the default for `assets_dir`.
|
|
34
|
+
#: A missing directory of this name is unremarkable; any other value was
|
|
35
|
+
#: chosen deliberately, so a missing one is reported.
|
|
36
|
+
DEFAULT_ASSETS_DIR = "assets"
|
|
37
|
+
|
|
34
38
|
AppCallable = Callable[[Page], Union[Any, Awaitable[Any]]]
|
|
35
39
|
"""Type alias for Flet app lifecycle callbacks.
|
|
36
40
|
|
|
@@ -41,32 +45,6 @@ Used for both `main` and `before_main` handlers.
|
|
|
41
45
|
"""
|
|
42
46
|
|
|
43
47
|
|
|
44
|
-
@deprecated(
|
|
45
|
-
"Use run() instead.",
|
|
46
|
-
docs_reason="Use [`run()`][flet.run] instead.",
|
|
47
|
-
version="0.80.0",
|
|
48
|
-
show_parentheses=True,
|
|
49
|
-
)
|
|
50
|
-
def app(*args, **kwargs):
|
|
51
|
-
new_args = list(args)
|
|
52
|
-
if "target" in kwargs:
|
|
53
|
-
new_args.insert(0, kwargs["target"])
|
|
54
|
-
return run(*new_args, **kwargs)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
@deprecated(
|
|
58
|
-
"Use run_async() instead.",
|
|
59
|
-
docs_reason="Use [`run_async()`][flet.run_async] instead.",
|
|
60
|
-
version="0.80.0",
|
|
61
|
-
show_parentheses=True,
|
|
62
|
-
)
|
|
63
|
-
def app_async(*args, **kwargs):
|
|
64
|
-
new_args = list(args)
|
|
65
|
-
if "target" in kwargs:
|
|
66
|
-
new_args.insert(0, kwargs["target"])
|
|
67
|
-
return run_async(*new_args, **kwargs)
|
|
68
|
-
|
|
69
|
-
|
|
70
48
|
def run(
|
|
71
49
|
main: AppCallable,
|
|
72
50
|
before_main: Optional[AppCallable] = None,
|
|
@@ -74,13 +52,12 @@ def run(
|
|
|
74
52
|
host: Optional[str] = None,
|
|
75
53
|
port: int = 0,
|
|
76
54
|
view: Optional[AppView] = AppView.FLET_APP,
|
|
77
|
-
assets_dir: Optional[str] =
|
|
55
|
+
assets_dir: Optional[str] = DEFAULT_ASSETS_DIR,
|
|
78
56
|
upload_dir: Optional[str] = None,
|
|
79
57
|
web_renderer: WebRenderer = WebRenderer.AUTO,
|
|
80
58
|
route_url_strategy: RouteUrlStrategy = RouteUrlStrategy.PATH,
|
|
81
59
|
no_cdn: Optional[bool] = False,
|
|
82
60
|
export_asgi_app: Optional[bool] = False,
|
|
83
|
-
target=None,
|
|
84
61
|
):
|
|
85
62
|
"""
|
|
86
63
|
Runs the Flet app.
|
|
@@ -101,14 +78,13 @@ def run(
|
|
|
101
78
|
no_cdn: Whether not load CanvasKit, Pyodide, or fonts from CDN.
|
|
102
79
|
export_asgi_app: If `True`, returns a configured ASGI app instead of
|
|
103
80
|
running an event loop.
|
|
104
|
-
target: Deprecated alias for `main`.
|
|
105
81
|
|
|
106
82
|
Returns:
|
|
107
83
|
A FastAPI ASGI app when `export_asgi_app=True`.
|
|
108
84
|
Otherwise, runs the app and returns `None`.
|
|
109
85
|
"""
|
|
110
86
|
if is_pyodide():
|
|
111
|
-
__run_pyodide(main=main
|
|
87
|
+
__run_pyodide(main=main, before_main=before_main)
|
|
112
88
|
return
|
|
113
89
|
|
|
114
90
|
if export_asgi_app:
|
|
@@ -116,7 +92,7 @@ def run(
|
|
|
116
92
|
from flet_web.fastapi.serve_fastapi_web_app import get_fastapi_web_app
|
|
117
93
|
|
|
118
94
|
return get_fastapi_web_app(
|
|
119
|
-
main=main
|
|
95
|
+
main=main,
|
|
120
96
|
before_main=before_main,
|
|
121
97
|
page_name=__get_page_name(name),
|
|
122
98
|
assets_dir=__get_assets_dir_path(assets_dir, relative_to_cwd=True),
|
|
@@ -134,7 +110,7 @@ def run(
|
|
|
134
110
|
|
|
135
111
|
return asyncio.run(
|
|
136
112
|
run_async(
|
|
137
|
-
main=main
|
|
113
|
+
main=main,
|
|
138
114
|
before_main=before_main,
|
|
139
115
|
name=name,
|
|
140
116
|
host=host,
|
|
@@ -156,12 +132,11 @@ async def run_async(
|
|
|
156
132
|
host: Optional[str] = None,
|
|
157
133
|
port: int = 0,
|
|
158
134
|
view: Optional[AppView] = AppView.FLET_APP,
|
|
159
|
-
assets_dir: Optional[str] =
|
|
135
|
+
assets_dir: Optional[str] = DEFAULT_ASSETS_DIR,
|
|
160
136
|
upload_dir: Optional[str] = None,
|
|
161
137
|
web_renderer: WebRenderer = WebRenderer.AUTO,
|
|
162
138
|
route_url_strategy: RouteUrlStrategy = RouteUrlStrategy.PATH,
|
|
163
139
|
no_cdn: Optional[bool] = False,
|
|
164
|
-
target=None,
|
|
165
140
|
):
|
|
166
141
|
"""
|
|
167
142
|
Asynchronously run a Flet app using socket or web server transport.
|
|
@@ -179,11 +154,10 @@ async def run_async(
|
|
|
179
154
|
web_renderer: Web renderer type for web-hosted mode.
|
|
180
155
|
route_url_strategy: Route URL strategy (`path` or `hash`).
|
|
181
156
|
no_cdn: Whether to avoid loading CanvasKit, Pyodide, and fonts from CDN.
|
|
182
|
-
target: Deprecated alias for `main`.
|
|
183
157
|
"""
|
|
184
158
|
|
|
185
159
|
if is_pyodide():
|
|
186
|
-
__run_pyodide(main=main
|
|
160
|
+
__run_pyodide(main=main, before_main=before_main)
|
|
187
161
|
return
|
|
188
162
|
|
|
189
163
|
if isinstance(view, str):
|
|
@@ -270,19 +244,19 @@ async def run_async(
|
|
|
270
244
|
if is_embedded() and bridge_port_env:
|
|
271
245
|
conn = await __run_dart_bridge_server(
|
|
272
246
|
port=int(bridge_port_env),
|
|
273
|
-
main=main
|
|
247
|
+
main=main,
|
|
274
248
|
before_main=before_main,
|
|
275
249
|
)
|
|
276
250
|
elif is_socket_server:
|
|
277
251
|
conn = await __run_socket_server(
|
|
278
252
|
port=port,
|
|
279
|
-
main=main
|
|
253
|
+
main=main,
|
|
280
254
|
before_main=before_main,
|
|
281
255
|
blocking=is_embedded(),
|
|
282
256
|
)
|
|
283
257
|
else:
|
|
284
258
|
conn = await __run_web_server(
|
|
285
|
-
main=main
|
|
259
|
+
main=main,
|
|
286
260
|
before_main=before_main,
|
|
287
261
|
host=host,
|
|
288
262
|
port=port,
|
|
@@ -680,16 +654,32 @@ def __get_assets_dir_path(assets_dir: Optional[str], relative_to_cwd=False):
|
|
|
680
654
|
"""
|
|
681
655
|
Resolve assets directory to an absolute path and apply env override.
|
|
682
656
|
|
|
657
|
+
A resolved directory that does not exist is dropped rather than passed on,
|
|
658
|
+
because a caller receiving it can only either ignore it silently (what the
|
|
659
|
+
desktop view does) or complain (what the web server does) - and the two
|
|
660
|
+
disagreeing is why the same app warned only under `--web`.
|
|
661
|
+
|
|
662
|
+
Whether that is worth reporting depends on where the value came from.
|
|
663
|
+
`assets_dir` defaults to `DEFAULT_ASSETS_DIR` whether or not the app has
|
|
664
|
+
such a directory, so a missing one is unremarkable; any other value was
|
|
665
|
+
chosen deliberately, so a missing one is a mistake worth a warning.
|
|
666
|
+
|
|
667
|
+
The env override is applied afterwards and is never dropped:
|
|
668
|
+
`FLET_ASSETS_DIR` is always set on purpose, so a bad value there is left
|
|
669
|
+
for downstream to report.
|
|
670
|
+
|
|
683
671
|
Args:
|
|
684
672
|
assets_dir: Input assets directory path.
|
|
685
673
|
relative_to_cwd: Resolve relative paths from current working directory
|
|
686
674
|
instead of current script directory.
|
|
687
675
|
|
|
688
676
|
Returns:
|
|
689
|
-
Resolved assets directory path or `None
|
|
677
|
+
Resolved assets directory path, or `None` if it was not set or does not
|
|
678
|
+
exist.
|
|
690
679
|
"""
|
|
691
680
|
|
|
692
681
|
if assets_dir:
|
|
682
|
+
requested = assets_dir
|
|
693
683
|
if not Path(assets_dir).is_absolute():
|
|
694
684
|
if "_MEI" in __file__:
|
|
695
685
|
# support for "onefile" PyInstaller
|
|
@@ -702,7 +692,14 @@ def __get_assets_dir_path(assets_dir: Optional[str], relative_to_cwd=False):
|
|
|
702
692
|
.joinpath(assets_dir)
|
|
703
693
|
.resolve()
|
|
704
694
|
)
|
|
705
|
-
|
|
695
|
+
if os.path.isdir(assets_dir):
|
|
696
|
+
logger.info("Assets path configured: %s", assets_dir)
|
|
697
|
+
else:
|
|
698
|
+
if requested == DEFAULT_ASSETS_DIR:
|
|
699
|
+
logger.debug("No assets directory at %s", assets_dir)
|
|
700
|
+
else:
|
|
701
|
+
logger.warning("assets_dir does not exist: %s", assets_dir)
|
|
702
|
+
assets_dir = None
|
|
706
703
|
|
|
707
704
|
env_assets_dir = os.getenv("FLET_ASSETS_DIR")
|
|
708
705
|
if env_assets_dir:
|
|
@@ -6,13 +6,22 @@ if TYPE_CHECKING:
|
|
|
6
6
|
from flet.components.component import Component
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
# `eq=False` keeps identity-based `__eq__`/`__hash__` from `object`. These are
|
|
10
|
+
# lifecycle objects tracked in lists and matched with `in`/`list.remove`, so two
|
|
11
|
+
# distinct instances must never compare equal - a generated `__eq__` compares
|
|
12
|
+
# fields and would match (and remove) the wrong instance. See #6776.
|
|
13
|
+
#
|
|
14
|
+
# `@dataclass` regenerates `__eq__` on every subclass, so each subclass of
|
|
15
|
+
# `ComponentOwned` must repeat `eq=False`; inheriting it is not enough.
|
|
16
|
+
@dataclass(eq=False)
|
|
10
17
|
class ComponentOwned:
|
|
11
18
|
"""
|
|
12
19
|
Base mixin for objects owned by a component via weak reference.
|
|
13
20
|
|
|
14
21
|
Used by hook/subscription state objects that must reference their owning
|
|
15
22
|
component without creating strong-reference cycles.
|
|
23
|
+
|
|
24
|
+
Subclasses are compared by identity, not by field values.
|
|
16
25
|
"""
|
|
17
26
|
|
|
18
27
|
owner: InitVar["Component"]
|
|
@@ -7,7 +7,8 @@ from flet.components.observable import Observable
|
|
|
7
7
|
from flet.components.utils import current_component, current_renderer
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
# eq=False: see ComponentOwned - lifecycle objects compare by identity.
|
|
11
|
+
@dataclass(eq=False)
|
|
11
12
|
class ContextHook(Hook):
|
|
12
13
|
"""
|
|
13
14
|
Marker hook for `use_context` subscription ordering.
|