flet 0.82.3.dev7876__tar.gz → 0.82.3.dev7882__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.82.3.dev7876 → flet-0.82.3.dev7882}/PKG-INFO +9 -9
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/pyproject.toml +9 -9
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/authorization_service.py +1 -1
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/context.py +22 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/page.py +1 -0
- flet-0.82.3.dev7882/src/flet/controls/services/shared_preferences.py +104 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/messaging/session.py +2 -1
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/version.py +1 -1
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet.egg-info/PKG-INFO +9 -9
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet.egg-info/SOURCES.txt +2 -1
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet.egg-info/requires.txt +8 -8
- flet-0.82.3.dev7882/tests/test_skip_double_update.py +137 -0
- flet-0.82.3.dev7876/src/flet/controls/services/shared_preferences.py +0 -51
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/README.md +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/setup.cfg +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/app.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/authorization.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/group.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/oauth_provider.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/oauth_token.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/providers/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/providers/auth0_oauth_provider.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/providers/azure_oauth_provider.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/providers/github_oauth_provider.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/providers/google_oauth_provider.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/user.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/canvas/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/cli.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/component.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/component_decorator.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/component_owned.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/hooks/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/hooks/hook.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/hooks/use_callback.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/hooks/use_context.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/hooks/use_effect.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/hooks/use_memo.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/hooks/use_ref.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/hooks/use_state.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/memo.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/observable.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/public_utils.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/components/utils.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/adaptive_control.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/alignment.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/animation.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/base_control.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/base_page.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/blur.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/border.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/border_radius.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/box.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/buttons.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/colors.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/control.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/control_event.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/control_state.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/animated_switcher.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/autofill_group.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/arc.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/canvas.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/circle.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/color.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/fill.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/image.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/line.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/oval.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/path.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/points.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/rect.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/shadow.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/shape.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/canvas/text.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/column.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/dismissible.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/drag_target.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/draggable.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/flet_app.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/gesture_detector.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/grid_view.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/hero.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/icon.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/image.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/interactive_viewer.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/keyboard_listener.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/list_view.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/markdown.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/merge_semantics.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/page_view.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/pagelet.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/placeholder.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/reorderable_drag_handle.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/responsive_row.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/rotated_box.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/row.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/safe_area.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/screenshot.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/semantics.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/shader_mask.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/shimmer.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/stack.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/text.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/text_span.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/transparent_pointer.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/view.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/window.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/core/window_drag_area.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_action_sheet.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_action_sheet_action.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_activity_indicator.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_alert_dialog.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_app_bar.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_bottom_sheet.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_checkbox.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_colors.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_context_menu.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_context_menu_action.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_date_picker.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_dialog_action.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_filled_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_icons.json +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_icons.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_icons.pyi +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_list_tile.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_navigation_bar.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_picker.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_radio.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_segmented_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_slider.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_sliding_segmented_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_switch.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_textfield.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_timer_picker.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/cupertino/cupertino_tinted_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/device_info.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/dialog_control.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/duration.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/embed_json_encoder.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/events.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/exceptions.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/geometry.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/gradients.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/icon_data.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/id_counter.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/keys.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/layout_control.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/margin.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/alert_dialog.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/app_bar.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/auto_complete.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/badge.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/banner.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/bottom_app_bar.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/bottom_sheet.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/card.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/checkbox.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/chip.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/circle_avatar.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/container.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/context_menu.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/datatable.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/date_picker.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/date_range_picker.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/divider.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/dropdown.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/dropdownm2.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/elevated_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/expansion_panel.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/expansion_tile.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/filled_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/filled_tonal_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/floating_action_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/form_field_control.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/icon_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/icons.json +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/icons.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/icons.pyi +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/list_tile.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/menu_bar.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/menu_item_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/navigation_bar.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/navigation_drawer.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/navigation_rail.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/outlined_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/popup_menu_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/progress_bar.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/progress_ring.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/radio.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/radio_group.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/range_slider.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/reorderable_list_view.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/search_bar.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/segmented_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/selection_area.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/slider.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/snack_bar.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/submenu_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/switch.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/tabs.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/text_button.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/textfield.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/time_picker.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/tooltip.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/material/vertical_divider.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/multi_view.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/object_patch.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/padding.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/painting.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/query_string.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/ref.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/scrollable_control.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/accelerometer.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/barometer.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/battery.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/browser_context_menu.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/clipboard.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/connectivity.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/file_picker.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/gyroscope.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/haptic_feedback.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/magnetometer.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/screen_brightness.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/semantics_service.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/sensor_error_event.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/service.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/shake_detector.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/share.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/storage_paths.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/url_launcher.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/user_accelerometer.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/services/wakelock.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/template_route.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/text_style.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/theme.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/transform.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/controls/types.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/fastapi/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/messaging/connection.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/messaging/flet_socket_server.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/messaging/protocol.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/messaging/pyodide_connection.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/messaging/session_store.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/pubsub/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/pubsub/pubsub_client.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/pubsub/pubsub_hub.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/py.typed +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/security/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/testing/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/testing/finder.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/testing/flet_test_app.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/testing/tester.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/__init__.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/browser.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/classproperty.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/deprecated.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/deprecated_enum.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/files.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/from_dict.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/hashing.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/json_utils.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/locks.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/network.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/object_model.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/once.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/pip.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/platform_utils.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/slugify.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/strings.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/typing_utils.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/utils/vector.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet.egg-info/dependency_links.txt +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet.egg-info/entry_points.txt +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet.egg-info/top_level.txt +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_auth_lazy_imports.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_base_control.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_colors.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_component_effects.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_component_renderer.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_dataclasses.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_datetime.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_events.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_from_dict.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_icons.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_object_diff_frozen.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_object_diff_in_place.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_object_diff_memory_churn.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_object_diff_performance.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_observable.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_patch_dataclass.py +0 -0
- {flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/tests/test_session_disconnect_buffering.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flet
|
|
3
|
-
Version: 0.82.3.
|
|
3
|
+
Version: 0.82.3.dev7882
|
|
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://docs.flet.dev/
|
|
10
10
|
Requires-Python: >=3.10
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
|
-
Requires-Dist: flet-cli==0.82.3.
|
|
13
|
-
Requires-Dist: flet-web==0.82.3.
|
|
12
|
+
Requires-Dist: flet-cli==0.82.3.dev7882; extra == "cli"
|
|
13
|
+
Requires-Dist: flet-web==0.82.3.dev7882; extra == "web"
|
|
14
14
|
Requires-Dist: oauthlib>=3.2.2; platform_system != "Pyodide"
|
|
15
15
|
Requires-Dist: httpx>=0.28.1; platform_system != "Pyodide"
|
|
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.82.3.
|
|
21
|
-
Requires-Dist: flet-web==0.82.3.
|
|
22
|
-
Requires-Dist: flet-desktop==0.82.3.
|
|
20
|
+
Requires-Dist: flet-cli==0.82.3.dev7882; extra == "all"
|
|
21
|
+
Requires-Dist: flet-web==0.82.3.dev7882; extra == "all"
|
|
22
|
+
Requires-Dist: flet-desktop==0.82.3.dev7882; extra == "all"
|
|
23
23
|
Provides-Extra: cli
|
|
24
|
-
Requires-Dist: flet-cli==0.82.3.
|
|
24
|
+
Requires-Dist: flet-cli==0.82.3.dev7882; extra == "cli"
|
|
25
25
|
Provides-Extra: desktop
|
|
26
|
-
Requires-Dist: flet-desktop==0.82.3.
|
|
26
|
+
Requires-Dist: flet-desktop==0.82.3.dev7882; extra == "desktop"
|
|
27
27
|
Provides-Extra: web
|
|
28
|
-
Requires-Dist: flet-web==0.82.3.
|
|
28
|
+
Requires-Dist: flet-web==0.82.3.dev7882; extra == "web"
|
|
29
29
|
|
|
30
30
|
<p align="center">
|
|
31
31
|
<a href="https://flet.dev"><img src="https://raw.githubusercontent.com/flet-dev/flet/refs/heads/main/media/logo/flet-logo.svg" height="150" alt="Flet logo"></a>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "flet"
|
|
3
|
-
version = "0.82.3.
|
|
3
|
+
version = "0.82.3.dev7882"
|
|
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.82.3.
|
|
11
|
-
"flet-web==0.82.3.
|
|
10
|
+
"flet-cli==0.82.3.dev7882; extra == 'cli'",
|
|
11
|
+
"flet-web==0.82.3.dev7882; extra == 'web'",
|
|
12
12
|
"oauthlib >=3.2.2; platform_system != 'Pyodide'",
|
|
13
13
|
"httpx >=0.28.1; platform_system != 'Pyodide'",
|
|
14
14
|
"repath >=0.9.0",
|
|
@@ -23,15 +23,15 @@ Documentation = "https://docs.flet.dev/"
|
|
|
23
23
|
|
|
24
24
|
[project.optional-dependencies]
|
|
25
25
|
all = [
|
|
26
|
-
"flet-cli==0.82.3.
|
|
27
|
-
"flet-web==0.82.3.
|
|
28
|
-
"flet-desktop==0.82.3.
|
|
26
|
+
"flet-cli==0.82.3.dev7882",
|
|
27
|
+
"flet-web==0.82.3.dev7882",
|
|
28
|
+
"flet-desktop==0.82.3.dev7882",
|
|
29
29
|
]
|
|
30
|
-
cli = ["flet-cli==0.82.3.
|
|
30
|
+
cli = ["flet-cli==0.82.3.dev7882"]
|
|
31
31
|
desktop = [
|
|
32
|
-
"flet-desktop==0.82.3.
|
|
32
|
+
"flet-desktop==0.82.3.dev7882",
|
|
33
33
|
]
|
|
34
|
-
web = ["flet-web==0.82.3.
|
|
34
|
+
web = ["flet-web==0.82.3.dev7882"]
|
|
35
35
|
|
|
36
36
|
[project.scripts]
|
|
37
37
|
flet = "flet.cli:main"
|
|
@@ -72,7 +72,7 @@ class AuthorizationService(Authorization):
|
|
|
72
72
|
await self.__refresh_token()
|
|
73
73
|
await self.__fetch_user_and_groups()
|
|
74
74
|
|
|
75
|
-
async def get_token(self):
|
|
75
|
+
async def get_token(self) -> Optional[OAuthToken]:
|
|
76
76
|
"""
|
|
77
77
|
Return current token after applying refresh logic when required.
|
|
78
78
|
|
|
@@ -110,6 +110,27 @@ class Context:
|
|
|
110
110
|
"""
|
|
111
111
|
return self.__components_mode
|
|
112
112
|
|
|
113
|
+
def mark_update_called(self):
|
|
114
|
+
"""
|
|
115
|
+
Marks that `.update()` was explicitly called during the current handler.
|
|
116
|
+
"""
|
|
117
|
+
_update_behavior_context_var.get()._update_called = True
|
|
118
|
+
|
|
119
|
+
def was_update_called(self) -> bool:
|
|
120
|
+
"""
|
|
121
|
+
Returns whether `.update()` was explicitly called during the current handler.
|
|
122
|
+
|
|
123
|
+
Returns:
|
|
124
|
+
`True` if `.update()` was called, `False` otherwise.
|
|
125
|
+
"""
|
|
126
|
+
return _update_behavior_context_var.get()._update_called
|
|
127
|
+
|
|
128
|
+
def reset_update_called(self):
|
|
129
|
+
"""
|
|
130
|
+
Resets the update-called flag for the current context.
|
|
131
|
+
"""
|
|
132
|
+
_update_behavior_context_var.get()._update_called = False
|
|
133
|
+
|
|
113
134
|
def auto_update_enabled(self) -> bool:
|
|
114
135
|
"""
|
|
115
136
|
Returns whether auto-update is enabled in the current context.
|
|
@@ -143,6 +164,7 @@ class UpdateBehavior:
|
|
|
143
164
|
"""
|
|
144
165
|
|
|
145
166
|
_auto_update_enabled: bool = True
|
|
167
|
+
_update_called: bool = False
|
|
146
168
|
|
|
147
169
|
|
|
148
170
|
_context_page = ContextVar("flet_session_page", default=None)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
from typing import Optional, TypeAlias, Union
|
|
2
|
+
|
|
3
|
+
from flet.controls.base_control import control
|
|
4
|
+
from flet.controls.services.service import Service
|
|
5
|
+
|
|
6
|
+
__all__ = ["SharedPreferences", "SharedPreferencesValueType"]
|
|
7
|
+
|
|
8
|
+
SharedPreferencesValueType: TypeAlias = Union[str, int, float, bool, list[str]]
|
|
9
|
+
"""Supported types for [`SharedPreferences`][flet.] values."""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@control("SharedPreferences")
|
|
13
|
+
class SharedPreferences(Service):
|
|
14
|
+
"""
|
|
15
|
+
Provides access to persistent key-value storage.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
async def set(self, key: str, value: SharedPreferencesValueType) -> bool:
|
|
19
|
+
"""
|
|
20
|
+
Sets a value for the given key.
|
|
21
|
+
|
|
22
|
+
Note:
|
|
23
|
+
Due to limitations on Android, it is not possible to set values that start
|
|
24
|
+
with any of the following: `VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu`,
|
|
25
|
+
`VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy`, and
|
|
26
|
+
`VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu`.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
key: The key to store the value under.
|
|
30
|
+
value: The value to store.
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
`True` if the value was set successfully, `False` otherwise.
|
|
34
|
+
|
|
35
|
+
Raises:
|
|
36
|
+
ValueError: If `value` is of an unsupported type
|
|
37
|
+
(`str`, `int`, `float`, `bool`, and `list[str]`).
|
|
38
|
+
"""
|
|
39
|
+
if not (
|
|
40
|
+
isinstance(value, (str, int, float, bool))
|
|
41
|
+
or (isinstance(value, list) and all(isinstance(x, str) for x in value))
|
|
42
|
+
):
|
|
43
|
+
raise ValueError(
|
|
44
|
+
f"Unsupported value type: {type(value)}. "
|
|
45
|
+
"Supported types are: str, int, float, bool, list[str]."
|
|
46
|
+
)
|
|
47
|
+
return await self._invoke_method("set", {"key": key, "value": value})
|
|
48
|
+
|
|
49
|
+
async def get(self, key: str) -> Optional[SharedPreferencesValueType]:
|
|
50
|
+
"""
|
|
51
|
+
Gets the value for the given key.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
key: The key to retrieve the value for.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
The value for the given key, or `None` if the key doesn't exist.
|
|
58
|
+
"""
|
|
59
|
+
return await self._invoke_method("get", {"key": key})
|
|
60
|
+
|
|
61
|
+
async def contains_key(self, key: str) -> bool:
|
|
62
|
+
"""
|
|
63
|
+
Checks if the given key exists.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
key: The key to check for existence.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
`True` if the key exists, `False` otherwise.
|
|
70
|
+
"""
|
|
71
|
+
return await self._invoke_method("contains_key", {"key": key})
|
|
72
|
+
|
|
73
|
+
async def remove(self, key: str) -> bool:
|
|
74
|
+
"""
|
|
75
|
+
Removes the value for the given key.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
key: The key to remove.
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
`True` if the key was removed, `False` if the key didn't exist.
|
|
82
|
+
"""
|
|
83
|
+
return await self._invoke_method("remove", {"key": key})
|
|
84
|
+
|
|
85
|
+
async def get_keys(self, key_prefix: str) -> list[str]:
|
|
86
|
+
"""
|
|
87
|
+
Gets all keys with the given prefix.
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
key_prefix: The prefix to filter keys by.
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
A list of keys that start with the given prefix.
|
|
94
|
+
"""
|
|
95
|
+
return await self._invoke_method("get_keys", {"key_prefix": key_prefix})
|
|
96
|
+
|
|
97
|
+
async def clear(self) -> bool:
|
|
98
|
+
"""
|
|
99
|
+
Clears all keys and values.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
`True` if the preferences were cleared successfully, `False` otherwise.
|
|
103
|
+
"""
|
|
104
|
+
return await self._invoke_method("clear")
|
|
@@ -435,8 +435,9 @@ class Session:
|
|
|
435
435
|
control: Control that handled the event, or `None`.
|
|
436
436
|
"""
|
|
437
437
|
# call auto-update
|
|
438
|
-
if context.auto_update_enabled():
|
|
438
|
+
if context.auto_update_enabled() and not context.was_update_called():
|
|
439
439
|
await self.__auto_update(control)
|
|
440
|
+
context.reset_update_called()
|
|
440
441
|
|
|
441
442
|
# unregister unreferenced services
|
|
442
443
|
self.page._services.unregister_services()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flet
|
|
3
|
-
Version: 0.82.3.
|
|
3
|
+
Version: 0.82.3.dev7882
|
|
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://docs.flet.dev/
|
|
10
10
|
Requires-Python: >=3.10
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
|
-
Requires-Dist: flet-cli==0.82.3.
|
|
13
|
-
Requires-Dist: flet-web==0.82.3.
|
|
12
|
+
Requires-Dist: flet-cli==0.82.3.dev7882; extra == "cli"
|
|
13
|
+
Requires-Dist: flet-web==0.82.3.dev7882; extra == "web"
|
|
14
14
|
Requires-Dist: oauthlib>=3.2.2; platform_system != "Pyodide"
|
|
15
15
|
Requires-Dist: httpx>=0.28.1; platform_system != "Pyodide"
|
|
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.82.3.
|
|
21
|
-
Requires-Dist: flet-web==0.82.3.
|
|
22
|
-
Requires-Dist: flet-desktop==0.82.3.
|
|
20
|
+
Requires-Dist: flet-cli==0.82.3.dev7882; extra == "all"
|
|
21
|
+
Requires-Dist: flet-web==0.82.3.dev7882; extra == "all"
|
|
22
|
+
Requires-Dist: flet-desktop==0.82.3.dev7882; extra == "all"
|
|
23
23
|
Provides-Extra: cli
|
|
24
|
-
Requires-Dist: flet-cli==0.82.3.
|
|
24
|
+
Requires-Dist: flet-cli==0.82.3.dev7882; extra == "cli"
|
|
25
25
|
Provides-Extra: desktop
|
|
26
|
-
Requires-Dist: flet-desktop==0.82.3.
|
|
26
|
+
Requires-Dist: flet-desktop==0.82.3.dev7882; extra == "desktop"
|
|
27
27
|
Provides-Extra: web
|
|
28
|
-
Requires-Dist: flet-web==0.82.3.
|
|
28
|
+
Requires-Dist: flet-web==0.82.3.dev7882; extra == "web"
|
|
29
29
|
|
|
30
30
|
<p align="center">
|
|
31
31
|
<a href="https://flet.dev"><img src="https://raw.githubusercontent.com/flet-dev/flet/refs/heads/main/media/logo/flet-logo.svg" height="150" alt="Flet logo"></a>
|
|
@@ -294,4 +294,5 @@ tests/test_object_diff_memory_churn.py
|
|
|
294
294
|
tests/test_object_diff_performance.py
|
|
295
295
|
tests/test_observable.py
|
|
296
296
|
tests/test_patch_dataclass.py
|
|
297
|
-
tests/test_session_disconnect_buffering.py
|
|
297
|
+
tests/test_session_disconnect_buffering.py
|
|
298
|
+
tests/test_skip_double_update.py
|
|
@@ -2,10 +2,10 @@ repath>=0.9.0
|
|
|
2
2
|
msgpack>=1.1.0
|
|
3
3
|
|
|
4
4
|
[:extra == "cli"]
|
|
5
|
-
flet-cli==0.82.3.
|
|
5
|
+
flet-cli==0.82.3.dev7882
|
|
6
6
|
|
|
7
7
|
[:extra == "web"]
|
|
8
|
-
flet-web==0.82.3.
|
|
8
|
+
flet-web==0.82.3.dev7882
|
|
9
9
|
|
|
10
10
|
[:platform_system != "Pyodide"]
|
|
11
11
|
oauthlib>=3.2.2
|
|
@@ -15,15 +15,15 @@ httpx>=0.28.1
|
|
|
15
15
|
typing-extensions
|
|
16
16
|
|
|
17
17
|
[all]
|
|
18
|
-
flet-cli==0.82.3.
|
|
19
|
-
flet-web==0.82.3.
|
|
20
|
-
flet-desktop==0.82.3.
|
|
18
|
+
flet-cli==0.82.3.dev7882
|
|
19
|
+
flet-web==0.82.3.dev7882
|
|
20
|
+
flet-desktop==0.82.3.dev7882
|
|
21
21
|
|
|
22
22
|
[cli]
|
|
23
|
-
flet-cli==0.82.3.
|
|
23
|
+
flet-cli==0.82.3.dev7882
|
|
24
24
|
|
|
25
25
|
[desktop]
|
|
26
|
-
flet-desktop==0.82.3.
|
|
26
|
+
flet-desktop==0.82.3.dev7882
|
|
27
27
|
|
|
28
28
|
[web]
|
|
29
|
-
flet-web==0.82.3.
|
|
29
|
+
flet-web==0.82.3.dev7882
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""Tests for skipping auto-update when .update() was already called."""
|
|
2
|
+
|
|
3
|
+
from unittest.mock import AsyncMock, patch
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
|
|
7
|
+
from flet.controls.context import UpdateBehavior, _update_behavior_context_var, context
|
|
8
|
+
from flet.messaging.connection import Connection
|
|
9
|
+
from flet.messaging.session import Session
|
|
10
|
+
from flet.pubsub.pubsub_hub import PubSubHub
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@pytest.fixture(autouse=True)
|
|
14
|
+
def _fresh_update_behavior():
|
|
15
|
+
"""Ensure each test starts with a clean UpdateBehavior."""
|
|
16
|
+
token = _update_behavior_context_var.set(UpdateBehavior())
|
|
17
|
+
yield
|
|
18
|
+
_update_behavior_context_var.reset(token)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _make_session():
|
|
22
|
+
conn = Connection()
|
|
23
|
+
conn.pubsubhub = PubSubHub()
|
|
24
|
+
return Session(conn)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# --- Context flag unit tests ---
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def test_update_called_flag_defaults_to_false():
|
|
31
|
+
assert context.was_update_called() is False
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_mark_update_called_sets_flag():
|
|
35
|
+
context.mark_update_called()
|
|
36
|
+
assert context.was_update_called() is True
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_reset_update_called_clears_flag():
|
|
40
|
+
context.mark_update_called()
|
|
41
|
+
context.reset_update_called()
|
|
42
|
+
assert context.was_update_called() is False
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def test_reset_auto_update_starts_with_clean_flag():
|
|
46
|
+
context.mark_update_called()
|
|
47
|
+
context.reset_auto_update()
|
|
48
|
+
assert context.was_update_called() is False
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# --- after_event integration tests ---
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@pytest.mark.asyncio
|
|
55
|
+
async def test_after_event_skips_auto_update_when_update_was_called():
|
|
56
|
+
session = _make_session()
|
|
57
|
+
context.mark_update_called()
|
|
58
|
+
|
|
59
|
+
with patch.object(
|
|
60
|
+
session, "_Session__auto_update", new_callable=AsyncMock
|
|
61
|
+
) as mock_auto:
|
|
62
|
+
await session.after_event(session.page)
|
|
63
|
+
mock_auto.assert_not_called()
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@pytest.mark.asyncio
|
|
67
|
+
async def test_after_event_runs_auto_update_when_update_was_not_called():
|
|
68
|
+
session = _make_session()
|
|
69
|
+
|
|
70
|
+
with patch.object(
|
|
71
|
+
session, "_Session__auto_update", new_callable=AsyncMock
|
|
72
|
+
) as mock_auto:
|
|
73
|
+
await session.after_event(session.page)
|
|
74
|
+
mock_auto.assert_called_once_with(session.page)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@pytest.mark.asyncio
|
|
78
|
+
async def test_after_event_resets_flag_after_check():
|
|
79
|
+
session = _make_session()
|
|
80
|
+
context.mark_update_called()
|
|
81
|
+
|
|
82
|
+
with patch.object(session, "_Session__auto_update", new_callable=AsyncMock):
|
|
83
|
+
await session.after_event(session.page)
|
|
84
|
+
|
|
85
|
+
assert context.was_update_called() is False
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@pytest.mark.asyncio
|
|
89
|
+
async def test_after_event_resets_flag_even_when_auto_update_disabled():
|
|
90
|
+
session = _make_session()
|
|
91
|
+
context.mark_update_called()
|
|
92
|
+
context.disable_auto_update()
|
|
93
|
+
|
|
94
|
+
with patch.object(session, "_Session__auto_update", new_callable=AsyncMock):
|
|
95
|
+
await session.after_event(session.page)
|
|
96
|
+
|
|
97
|
+
assert context.was_update_called() is False
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
# --- Generator handler simulation ---
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@pytest.mark.asyncio
|
|
104
|
+
async def test_generator_handler_flag_resets_between_yields():
|
|
105
|
+
"""Simulate a generator handler where after_event is called after each yield.
|
|
106
|
+
|
|
107
|
+
First yield: .update() was called -> skip auto-update
|
|
108
|
+
Second yield: no .update() called -> auto-update fires
|
|
109
|
+
"""
|
|
110
|
+
session = _make_session()
|
|
111
|
+
|
|
112
|
+
with patch.object(
|
|
113
|
+
session, "_Session__auto_update", new_callable=AsyncMock
|
|
114
|
+
) as mock_auto:
|
|
115
|
+
# First yield segment: user called .update()
|
|
116
|
+
context.mark_update_called()
|
|
117
|
+
await session.after_event(session.page)
|
|
118
|
+
assert mock_auto.call_count == 0
|
|
119
|
+
|
|
120
|
+
# Second yield segment: no .update() called
|
|
121
|
+
await session.after_event(session.page)
|
|
122
|
+
assert mock_auto.call_count == 1
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
# --- Page.update() marks the flag ---
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def test_page_update_marks_flag():
|
|
129
|
+
session = _make_session()
|
|
130
|
+
page = session.page
|
|
131
|
+
|
|
132
|
+
# Page.update() internally calls patch_control which needs a real connection,
|
|
133
|
+
# so we mock __update to isolate the flag-setting behavior.
|
|
134
|
+
with patch.object(page, "_Page__update"):
|
|
135
|
+
page.update()
|
|
136
|
+
|
|
137
|
+
assert context.was_update_called() is True
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
from flet.controls.base_control import control
|
|
4
|
-
from flet.controls.services.service import Service
|
|
5
|
-
|
|
6
|
-
__all__ = ["SharedPreferences"]
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
@control("SharedPreferences")
|
|
10
|
-
class SharedPreferences(Service):
|
|
11
|
-
"""
|
|
12
|
-
Provides access to persistent key-value storage.
|
|
13
|
-
"""
|
|
14
|
-
|
|
15
|
-
async def set(self, key: str, value: Any) -> bool:
|
|
16
|
-
"""
|
|
17
|
-
Sets a value for the given key.
|
|
18
|
-
"""
|
|
19
|
-
if value is None:
|
|
20
|
-
raise ValueError("value can't be None")
|
|
21
|
-
return await self._invoke_method("set", {"key": key, "value": value})
|
|
22
|
-
|
|
23
|
-
async def get(self, key: str):
|
|
24
|
-
"""
|
|
25
|
-
Gets the value for the given key.
|
|
26
|
-
"""
|
|
27
|
-
return await self._invoke_method("get", {"key": key})
|
|
28
|
-
|
|
29
|
-
async def contains_key(self, key: str) -> bool:
|
|
30
|
-
"""
|
|
31
|
-
Checks if the given key exists.
|
|
32
|
-
"""
|
|
33
|
-
return await self._invoke_method("contains_key", {"key": key})
|
|
34
|
-
|
|
35
|
-
async def remove(self, key: str) -> bool:
|
|
36
|
-
"""
|
|
37
|
-
Removes the value for the given key.
|
|
38
|
-
"""
|
|
39
|
-
return await self._invoke_method("remove", {"key": key})
|
|
40
|
-
|
|
41
|
-
async def get_keys(self, key_prefix: str) -> list[str]:
|
|
42
|
-
"""
|
|
43
|
-
Gets all keys with the given prefix.
|
|
44
|
-
"""
|
|
45
|
-
return await self._invoke_method("get_keys", {"key_prefix": key_prefix})
|
|
46
|
-
|
|
47
|
-
async def clear(self) -> bool:
|
|
48
|
-
"""
|
|
49
|
-
Clears all keys and values.
|
|
50
|
-
"""
|
|
51
|
-
return await self._invoke_method("clear")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/providers/github_oauth_provider.py
RENAMED
|
File without changes
|
{flet-0.82.3.dev7876 → flet-0.82.3.dev7882}/src/flet/auth/providers/google_oauth_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|