From 1b389c1610c638892f68c5c69319e109fcc75d7d Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Tue, 11 Nov 2025 12:26:51 +0100 Subject: [PATCH 1/6] integration tests --- .../{alert_dialog_basic.png => basic.png} | Bin .../macos/app_bar/{app_bar.png => basic.png} | Bin .../banner/{banner_0.png => presence_0.png} | Bin .../banner/{banner_1.png => presence_1.png} | Bin ...er_string_content.png => string_content.png} | Bin .../{bottom_app_bar.png => basic.png} | Bin .../button/{button_style.png => style.png} | Bin ..._style_conflicts.png => style_conflicts.png} | Bin .../macos/card/{card_basic.png => basic.png} | Bin .../golden/macos/chip/{chip.png => basic.png} | Bin .../chip/{chip_clicked.png => clicked.png} | Bin .../{circle_avatar.png => basic.png} | Bin ...{icon_circle_avatar.png => icon_content.png} | Bin .../{date_picker_basic.png => basic.png} | Bin .../macos/date_range_picker_theme/theme1.png | Bin 63810 -> 0 bytes ...expansion_panel_list_basic.png => basic.png} | Bin .../{filled_button_basic.png => basic.png} | Bin ...{filled_tonal_button_basic.png => basic.png} | Bin .../{grid_view_basic.png => basic.png} | Bin ...{grid_view_horizontal.png => horizontal.png} | Bin ...ontal_unbound.png => horizontal_unbound.png} | Bin ...{grid_view_max_extent.png => max_extent.png} | Bin .../{list_view_basic.png => basic.png} | Bin ...{list_view_horizontal.png => horizontal.png} | Bin ...ontal_unbound.png => horizontal_unbound.png} | Bin .../menu_bar/{menu_bar_basic.png => basic.png} | Bin .../{menu_bar_basic_open.png => basic_open.png} | Bin .../{menu_item_button_basic.png => basic.png} | Bin .../{navigation_rail.png => basic.png} | Bin ...o_selected_icon.png => no_selected_icon.png} | Bin .../{outlined_button_basic.png => basic.png} | Bin ...eorderable_list_view_basic.png => basic.png} | Bin .../{snack_bar_basic.png => basic.png} | Bin .../{submenu_button_basic.png => basic.png} | Bin .../{text_button_basic.png => basic.png} | Bin .../golden/macos/textfield/basic_textfield.png | Bin 823 -> 0 bytes .../textfield/{with_label.png => label.png} | Bin ..._label_and_value.png => label_and_value.png} | Bin .../{time_picker_basic.png => basic.png} | Bin .../{vertical_divider_basic.png => basic.png} | Bin ...al_divider_properties.png => properties.png} | Bin .../controls/material/test_alert_dialog.py | 4 ++-- .../controls/material/test_app_bar.py | 2 +- .../controls/material/test_banner.py | 10 +++++----- .../controls/material/test_bottom_app_bar.py | 2 +- .../controls/material/test_button.py | 4 ++-- .../controls/material/test_card.py | 8 ++++++-- .../controls/material/test_chip.py | 6 +++--- .../controls/material/test_circle_avatar.py | 8 +++++--- .../controls/material/test_data_table.py | 9 +++++---- .../controls/material/test_date_picker.py | 4 ++-- .../controls/material/test_divider.py | 2 +- .../material/test_expansion_panel_list.py | 2 +- .../controls/material/test_filled_button.py | 2 +- .../material/test_filled_tonal_button.py | 2 +- .../controls/material/test_grid_view.py | 8 ++++---- .../controls/material/test_list_tile.py | 4 ++-- .../controls/material/test_list_view.py | 6 +++--- .../controls/material/test_menu_bar.py | 6 +++--- .../controls/material/test_outlined_button.py | 2 +- .../controls/material/test_range_slider.py | 2 +- .../material/test_reorderable_list_view.py | 2 +- .../controls/material/test_snack_bar.py | 4 ++-- .../controls/material/test_submenu_button.py | 2 +- .../controls/material/test_text_button.py | 2 +- .../controls/material/test_textfield.py | 4 ++-- .../controls/material/test_vertical_divider.py | 8 ++++---- .../golden/macos/date_picker_theme/theme_1.png} | Bin .../test_date_picker_theme.py | 4 ++-- 69 files changed, 63 insertions(+), 56 deletions(-) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/alert_dialog/{alert_dialog_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/app_bar/{app_bar.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/{banner_0.png => presence_0.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/{banner_1.png => presence_1.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/{banner_string_content.png => string_content.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/bottom_app_bar/{bottom_app_bar.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/button/{button_style.png => style.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/button/{button_style_conflicts.png => style_conflicts.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/card/{card_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/chip/{chip.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/chip/{chip_clicked.png => clicked.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/circle_avatar/{circle_avatar.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/circle_avatar/{icon_circle_avatar.png => icon_content.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/date_picker/{date_picker_basic.png => basic.png} (100%) delete mode 100644 sdk/python/packages/flet/integration_tests/controls/material/golden/macos/date_range_picker_theme/theme1.png rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/expansion_panel_list/{expansion_panel_list_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/filled_button/{filled_button_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/filled_tonal_button/{filled_tonal_button_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/{grid_view_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/{grid_view_horizontal.png => horizontal.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/{grid_view_horizontal_unbound.png => horizontal_unbound.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/{grid_view_max_extent.png => max_extent.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/{list_view_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/{list_view_horizontal.png => horizontal.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/{list_view_horizontal_unbound.png => horizontal_unbound.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_bar/{menu_bar_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_bar/{menu_bar_basic_open.png => basic_open.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_item_button/{menu_item_button_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/{navigation_rail.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/{navigation_rail_no_selected_icon.png => no_selected_icon.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/outlined_button/{outlined_button_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/reorderable_list_view/{reorderable_list_view_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/snack_bar/{snack_bar_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/submenu_button/{submenu_button_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/text_button/{text_button_basic.png => basic.png} (100%) delete mode 100644 sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/basic_textfield.png rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/{with_label.png => label.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/{with_label_and_value.png => label_and_value.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/time_picker/{time_picker_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/vertical_divider/{vertical_divider_basic.png => basic.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/vertical_divider/{vertical_divider_properties.png => properties.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/{material/golden/macos/date_picker_theme/theme1.png => theme/golden/macos/date_picker_theme/theme_1.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/{material => theme}/test_date_picker_theme.py (92%) diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/alert_dialog/alert_dialog_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/alert_dialog/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/alert_dialog/alert_dialog_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/alert_dialog/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/app_bar/app_bar.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/app_bar/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/app_bar/app_bar.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/app_bar/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/banner_0.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/presence_0.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/banner_0.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/presence_0.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/banner_1.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/presence_1.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/banner_1.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/presence_1.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/banner_string_content.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/string_content.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/banner_string_content.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/banner/string_content.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/bottom_app_bar/bottom_app_bar.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/bottom_app_bar/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/bottom_app_bar/bottom_app_bar.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/bottom_app_bar/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/button/button_style.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/button/style.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/button/button_style.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/button/style.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/button/button_style_conflicts.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/button/style_conflicts.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/button/button_style_conflicts.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/button/style_conflicts.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/card/card_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/card/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/card/card_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/card/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/chip/chip.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/chip/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/chip/chip.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/chip/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/chip/chip_clicked.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/chip/clicked.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/chip/chip_clicked.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/chip/clicked.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/circle_avatar/circle_avatar.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/circle_avatar/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/circle_avatar/circle_avatar.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/circle_avatar/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/circle_avatar/icon_circle_avatar.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/circle_avatar/icon_content.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/circle_avatar/icon_circle_avatar.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/circle_avatar/icon_content.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/date_picker/date_picker_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/date_picker/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/date_picker/date_picker_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/date_picker/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/date_range_picker_theme/theme1.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/date_range_picker_theme/theme1.png deleted file mode 100644 index e0adf48866fb1b3cef875966d82b259c41c5800b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63810 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 jw1`UHK^9*nk;XoFf|ibN7D$#Rc#8 diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/expansion_panel_list/expansion_panel_list_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/expansion_panel_list/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/expansion_panel_list/expansion_panel_list_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/expansion_panel_list/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/filled_button/filled_button_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/filled_button/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/filled_button/filled_button_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/filled_button/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/filled_tonal_button/filled_tonal_button_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/filled_tonal_button/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/filled_tonal_button/filled_tonal_button_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/filled_tonal_button/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/grid_view_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/grid_view_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/grid_view_horizontal.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/horizontal.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/grid_view_horizontal.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/horizontal.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/grid_view_horizontal_unbound.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/horizontal_unbound.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/grid_view_horizontal_unbound.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/horizontal_unbound.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/grid_view_max_extent.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/max_extent.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/grid_view_max_extent.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/grid_view/max_extent.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/list_view_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/list_view_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/list_view_horizontal.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/horizontal.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/list_view_horizontal.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/horizontal.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/list_view_horizontal_unbound.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/horizontal_unbound.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/list_view_horizontal_unbound.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/list_view/horizontal_unbound.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_bar/menu_bar_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_bar/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_bar/menu_bar_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_bar/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_bar/menu_bar_basic_open.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_bar/basic_open.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_bar/menu_bar_basic_open.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_bar/basic_open.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_item_button/menu_item_button_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_item_button/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_item_button/menu_item_button_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/menu_item_button/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/navigation_rail.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/navigation_rail.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/navigation_rail_no_selected_icon.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/no_selected_icon.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/navigation_rail_no_selected_icon.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/navigation_rail/no_selected_icon.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/outlined_button/outlined_button_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/outlined_button/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/outlined_button/outlined_button_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/outlined_button/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/reorderable_list_view/reorderable_list_view_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/reorderable_list_view/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/reorderable_list_view/reorderable_list_view_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/reorderable_list_view/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/snack_bar/snack_bar_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/snack_bar/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/snack_bar/snack_bar_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/snack_bar/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/submenu_button/submenu_button_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/submenu_button/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/submenu_button/submenu_button_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/submenu_button/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/text_button/text_button_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/text_button/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/text_button/text_button_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/text_button/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/basic_textfield.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/basic_textfield.png deleted file mode 100644 index e565da8576fd5652c9e4667f7e41335bc891d73c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmeAS@N?(olHy`uVBq!ia0y~yV2S{;6FAs_ubMea=z9lt|Dro_2=P5%}Z(HL7LUNR-FS@pEE zp-`sWC6?VCleIZcT3+(lQ@Q@fY5&6+X+JZjJ~2D#JL$Db`20DH3_s?-owP^wrdp-f zC!4!-WM%6-ipp>OWMI&{mptkBc{4N5Z;zwYBh@13)Y&mK?7x?^w{MJ2K_3_-*&Xt|o3=Qj}{i?F2p1i#J>rQoMh8+p7Uk0xc_g~Mz@bAV$ z&1>G1_Vl-k-(qB_yPsro^>@yn6YBGG7#JR8fAci5|1QG7@L#Htl_5ZF0|Ub;7BL2g znFp8{G=za+l*+`-u)rsQkzop_4nu>{s3MAkAZK2Rd7b__8*YXJs@7YsM%36pc3@zb{_aB1ZIwvXoBi39_jUr4#-*Z5!K)9SZ7+Nrn!?CX zbF#?fN}b77f3wM-qWTZV)vz=C$S{n`w0*h!Y+`X)$q&VocVDKnFzm?a_k73S{rJGC uANM~%Q{eKs{0tA)ZMpUXO@geCxQ!xdow diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/with_label.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/label.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/with_label.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/label.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/with_label_and_value.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/label_and_value.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/with_label_and_value.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/textfield/label_and_value.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/time_picker/time_picker_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/time_picker/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/time_picker/time_picker_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/time_picker/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/vertical_divider/vertical_divider_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/vertical_divider/basic.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/vertical_divider/vertical_divider_basic.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/vertical_divider/basic.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/vertical_divider/vertical_divider_properties.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/vertical_divider/properties.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/vertical_divider/vertical_divider_properties.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/vertical_divider/properties.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_alert_dialog.py b/sdk/python/packages/flet/integration_tests/controls/material/test_alert_dialog.py index a37138ab2f..6c31c334c4 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_alert_dialog.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_alert_dialog.py @@ -14,7 +14,7 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_alert_dialog_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): ad = ft.AlertDialog( key="ad", title=ft.Text("Hello"), @@ -76,8 +76,8 @@ async def test_update_body(flet_app: ftt.FletTestApp, request): cancel.disabled = not cancel.disabled # disable button flet_app.page.update() await flet_app.tester.pump_and_settle() - assert (await flet_app.tester.find_by_text("OK")).count == 0 + assert (await flet_app.tester.find_by_text("OK")).count == 0 flet_app.assert_screenshot( "update_body_2", await flet_app.page.take_screenshot( diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_app_bar.py b/sdk/python/packages/flet/integration_tests/controls/material/test_app_bar.py index 19a3fea223..afa7368a07 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_app_bar.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_app_bar.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_app_bar(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.AppBar( diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_banner.py b/sdk/python/packages/flet/integration_tests/controls/material/test_banner.py index 3da167baec..042be31baa 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_banner.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_banner.py @@ -12,7 +12,7 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_banner_presence(flet_app: ftt.FletTestApp, request): +async def test_presence(flet_app: ftt.FletTestApp, request): action_button_style = ft.ButtonStyle(color=ft.Colors.BLUE) def handle_banner_close(e: ft.Event[ft.TextButton]): @@ -57,7 +57,7 @@ def handle_banner_close(e: ft.Event[ft.TextButton]): await flet_app.tester.tap(await flet_app.tester.find_by_key("eb")) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "banner_0", + "presence_0", await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), @@ -66,7 +66,7 @@ def handle_banner_close(e: ft.Event[ft.TextButton]): await flet_app.tester.tap(await flet_app.tester.find_by_key("retry")) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "banner_1", + "presence_1", await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), @@ -74,7 +74,7 @@ def handle_banner_close(e: ft.Event[ft.TextButton]): @pytest.mark.asyncio(loop_scope="function") -async def test_banner_string_content(flet_app: ftt.FletTestApp, request): +async def test_string_content(flet_app: ftt.FletTestApp, request): banner = ft.Banner( "This is a banner with string content.", actions=[ @@ -90,7 +90,7 @@ async def test_banner_string_content(flet_app: ftt.FletTestApp, request): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "banner_string_content", + request.node.name, await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_bottom_app_bar.py b/sdk/python/packages/flet/integration_tests/controls/material/test_bottom_app_bar.py index 0a3f046e16..2dd0b2a9fa 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_bottom_app_bar.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_bottom_app_bar.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_bottom_app_bar(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.BottomAppBar( diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_button.py b/sdk/python/packages/flet/integration_tests/controls/material/test_button.py index 83adcf35ea..1787abc7e4 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_button.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_button.py @@ -34,7 +34,7 @@ async def test_issue_5538(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_button_style(flet_app: ftt.FletTestApp, request): +async def test_style(flet_app: ftt.FletTestApp, request): flet_app.page.theme_mode = ft.ThemeMode.LIGHT await flet_app.assert_control_screenshot( request.node.name, @@ -56,7 +56,7 @@ async def test_button_style(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_button_style_conflicts(flet_app: ftt.FletTestApp, request): +async def test_style_conflicts(flet_app: ftt.FletTestApp, request): flet_app.page.theme_mode = ft.ThemeMode.LIGHT await flet_app.assert_control_screenshot( request.node.name, diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_card.py b/sdk/python/packages/flet/integration_tests/controls/material/test_card.py index 193f23eb95..d5f127e906 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_card.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_card.py @@ -5,10 +5,14 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_card_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.Card( - content=ft.Container(width=400, padding=10, content=ft.Text("Card")), + content=ft.Container( + width=400, + padding=10, + content=ft.Text("Card"), + ), ), ) diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_chip.py b/sdk/python/packages/flet/integration_tests/controls/material/test_chip.py index 60dbbd94b8..15d888375c 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_chip.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_chip.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_chip(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.Chip( @@ -19,7 +19,7 @@ async def test_chip(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_chip_clicked(flet_app: ftt.FletTestApp, request): +async def test_clicked(flet_app: ftt.FletTestApp, request): flet_app.page.clean() await flet_app.tester.pump_and_settle() @@ -46,7 +46,7 @@ def handle_chip_click(e: ft.Event[ft.Chip]): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "chip_clicked", + request.node.name, await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_circle_avatar.py b/sdk/python/packages/flet/integration_tests/controls/material/test_circle_avatar.py index 56e764770f..18c3583d0d 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_circle_avatar.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_circle_avatar.py @@ -8,7 +8,7 @@ reason="temporarily disabled due to reference image generation failure" ) @pytest.mark.asyncio(loop_scope="module") -async def test_circle_avatar(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): ca = ft.CircleAvatar( foreground_image_src="https://avatars.githubusercontent.com/u/5041459?s=88&v=4", content=ft.Text("FF"), @@ -17,8 +17,10 @@ async def test_circle_avatar(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_icon_circle_avatar(flet_app: ftt.FletTestApp, request): +async def test_icon_content(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, - ft.CircleAvatar(content=ft.Icon(ft.Icons.ABC)), + ft.CircleAvatar( + content=ft.Icon(ft.Icons.ABC), + ), ) diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_data_table.py b/sdk/python/packages/flet/integration_tests/controls/material/test_data_table.py index b8269a5cba..62c226908a 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_data_table.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_data_table.py @@ -36,6 +36,7 @@ async def test_basic(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="function") async def test_theme(flet_app: ftt.FletTestApp): + flet_app.resize_page(400, 600) flet_app.page.theme = ft.Theme( data_table_theme=ft.DataTableTheme( checkbox_horizontal_margin=10, @@ -63,9 +64,8 @@ async def test_theme(flet_app: ftt.FletTestApp): thickness=5, ), ) - flet_app.resize_page(400, 600) - scr_1 = ft.Screenshot( + flet_app.page.add( ft.DataTable( # bgcolor=ft.Colors.BLUE_100, show_checkbox_column=True, @@ -96,10 +96,11 @@ async def test_theme(flet_app: ftt.FletTestApp): ], ) ) - flet_app.page.add(scr_1) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( "theme_1", - await scr_1.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), + await flet_app.page.take_screenshot( + pixel_ratio=flet_app.screenshots_pixel_ratio + ), ) diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_date_picker.py b/sdk/python/packages/flet/integration_tests/controls/material/test_date_picker.py index 321c6813a9..12b1b52600 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_date_picker.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_date_picker.py @@ -7,7 +7,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_date_picker_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): dp = ft.DatePicker( current_date=datetime.datetime(year=2025, month=8, day=15), first_date=datetime.datetime(year=2000, month=10, day=1), @@ -20,7 +20,7 @@ async def test_date_picker_basic(flet_app: ftt.FletTestApp, request): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "date_picker_basic", + request.node.name, await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_divider.py b/sdk/python/packages/flet/integration_tests/controls/material/test_divider.py index 1b613607c1..2339eac9f9 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_divider.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_divider.py @@ -34,7 +34,7 @@ async def test_properties(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="function") -async def test_divider_radius(flet_app: ftt.FletTestApp, request): +async def test_radius(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.Divider( diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_expansion_panel_list.py b/sdk/python/packages/flet/integration_tests/controls/material/test_expansion_panel_list.py index 3e4e619f9e..3ae6042f3a 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_expansion_panel_list.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_expansion_panel_list.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_expansion_panel_list_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.ExpansionPanelList( diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_filled_button.py b/sdk/python/packages/flet/integration_tests/controls/material/test_filled_button.py index e1580274e8..84ca94af5a 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_filled_button.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_filled_button.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_filled_button_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.FilledButton("Click me"), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_filled_tonal_button.py b/sdk/python/packages/flet/integration_tests/controls/material/test_filled_tonal_button.py index 7062982e80..b7ec452f08 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_filled_tonal_button.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_filled_tonal_button.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_filled_tonal_button_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.FilledTonalButton("Click me"), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_grid_view.py b/sdk/python/packages/flet/integration_tests/controls/material/test_grid_view.py index d902af5abf..ddf2f5d01c 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_grid_view.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_grid_view.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_grid_view_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.GridView( @@ -17,7 +17,7 @@ async def test_grid_view_basic(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_grid_view_max_extent(flet_app: ftt.FletTestApp, request): +async def test_max_extent(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.GridView( @@ -33,7 +33,7 @@ async def test_grid_view_max_extent(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_grid_view_horizontal_unbound(flet_app: ftt.FletTestApp, request): +async def test_horizontal_unbound(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.GridView( @@ -49,7 +49,7 @@ async def test_grid_view_horizontal_unbound(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_grid_view_horizontal(flet_app: ftt.FletTestApp, request): +async def test_horizontal(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.GridView( diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_list_tile.py b/sdk/python/packages/flet/integration_tests/controls/material/test_list_tile.py index 233e657bd8..f02439daa1 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_list_tile.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_list_tile.py @@ -24,7 +24,7 @@ async def test_properties1(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.Column( - [ + controls=[ ft.ListTile( "List Tile with custom shape", subtitle="Subtitle", @@ -95,7 +95,7 @@ async def test_properties2(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.Column( - [ + controls=[ ft.ListTile( title="List Tile with horizontal spacing", subtitle="Subtitle", diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_list_view.py b/sdk/python/packages/flet/integration_tests/controls/material/test_list_view.py index e5e21e8dd6..f4c9a7eba5 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_list_view.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_list_view.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_list_view_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.ListView( @@ -17,7 +17,7 @@ async def test_list_view_basic(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_list_view_horizontal(flet_app: ftt.FletTestApp, request): +async def test_horizontal(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.ListView( @@ -33,7 +33,7 @@ async def test_list_view_horizontal(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_list_view_horizontal_unbound(flet_app: ftt.FletTestApp, request): +async def test_horizontal_unbound(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.ListView( diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_menu_bar.py b/sdk/python/packages/flet/integration_tests/controls/material/test_menu_bar.py index b516f55e10..87b74152ba 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_menu_bar.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_menu_bar.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_menu_bar_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): pb = ft.MenuBar( expand=True, style=ft.MenuStyle( @@ -45,7 +45,7 @@ async def test_menu_bar_basic(flet_app: ftt.FletTestApp, request): # normal state flet_app.assert_screenshot( - "menu_bar_basic", + "basic", await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), @@ -55,7 +55,7 @@ async def test_menu_bar_basic(flet_app: ftt.FletTestApp, request): await flet_app.tester.tap(await flet_app.tester.find_by_key("sb")) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "menu_bar_basic_open", + "basic_open", await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_outlined_button.py b/sdk/python/packages/flet/integration_tests/controls/material/test_outlined_button.py index ffa5c22a7f..d162c6f2ca 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_outlined_button.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_outlined_button.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_outlined_button_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.OutlinedButton("Click me"), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_range_slider.py b/sdk/python/packages/flet/integration_tests/controls/material/test_range_slider.py index f5694aa766..f57bc336da 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_range_slider.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_range_slider.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_range_slider(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): rs = ft.RangeSlider( min=0, max=50, diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_reorderable_list_view.py b/sdk/python/packages/flet/integration_tests/controls/material/test_reorderable_list_view.py index 4e9eb59459..d7381edba6 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_reorderable_list_view.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_reorderable_list_view.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_reorderable_list_view_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.ReorderableListView( diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_snack_bar.py b/sdk/python/packages/flet/integration_tests/controls/material/test_snack_bar.py index cb279ae40c..4a61243b03 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_snack_bar.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_snack_bar.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_snack_bar_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): flet_app.page.enable_screenshots = True flet_app.resize_page(400, 600) flet_app.page.show_dialog(ft.SnackBar(ft.Text("Hello, world!"))) @@ -13,7 +13,7 @@ async def test_snack_bar_basic(flet_app: ftt.FletTestApp, request): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "snack_bar_basic", + request.node.name, await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_submenu_button.py b/sdk/python/packages/flet/integration_tests/controls/material/test_submenu_button.py index febe2fdb66..3e6765a3de 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_submenu_button.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_submenu_button.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_submenu_button_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.SubmenuButton("Click me"), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_text_button.py b/sdk/python/packages/flet/integration_tests/controls/material/test_text_button.py index 2cda65f482..12a61c379d 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_text_button.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_text_button.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_text_button_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.TextButton("Click me"), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_textfield.py b/sdk/python/packages/flet/integration_tests/controls/material/test_textfield.py index d12b679c32..1c2cc43978 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_textfield.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_textfield.py @@ -13,7 +13,7 @@ async def test_basic(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_with_label(flet_app: ftt.FletTestApp, request): +async def test_label(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.TextField(label="TextField label", margin=20), @@ -21,7 +21,7 @@ async def test_with_label(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="module") -async def test_with_label_and_value(flet_app: ftt.FletTestApp, request): +async def test_label_and_value(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.TextField(label="TextField label", value="TextField 1 value", margin=20), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_vertical_divider.py b/sdk/python/packages/flet/integration_tests/controls/material/test_vertical_divider.py index a11d3ac8b6..5487afed14 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_vertical_divider.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_vertical_divider.py @@ -11,7 +11,7 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_vertical_divider_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): flet_app.page.theme_mode = ft.ThemeMode.LIGHT flet_app.page.enable_screenshots = True flet_app.resize_page(400, 600) @@ -19,7 +19,7 @@ async def test_vertical_divider_basic(flet_app: ftt.FletTestApp, request): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "vertical_divider_basic", + request.node.name, await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), @@ -27,7 +27,7 @@ async def test_vertical_divider_basic(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="function") -async def test_vertical_divider_properties(flet_app: ftt.FletTestApp, request): +async def test_properties(flet_app: ftt.FletTestApp, request): flet_app.page.theme_mode = ft.ThemeMode.LIGHT flet_app.page.enable_screenshots = True flet_app.resize_page(400, 600) @@ -45,7 +45,7 @@ async def test_vertical_divider_properties(flet_app: ftt.FletTestApp, request): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "vertical_divider_properties", + request.node.name, await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/date_picker_theme/theme1.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/date_picker_theme/theme_1.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/date_picker_theme/theme1.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/date_picker_theme/theme_1.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_date_picker_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_date_picker_theme.py similarity index 92% rename from sdk/python/packages/flet/integration_tests/controls/material/test_date_picker_theme.py rename to sdk/python/packages/flet/integration_tests/controls/theme/test_date_picker_theme.py index 6729faf7a5..07978fecb3 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_date_picker_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_date_picker_theme.py @@ -14,7 +14,7 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_date_picker_theme(flet_app: ftt.FletTestApp, request): +async def test_theme_1(flet_app: ftt.FletTestApp, request): flet_app.page.theme = ft.Theme( date_picker_theme=ft.DatePickerTheme( bgcolor=ft.Colors.GREEN_200, @@ -33,7 +33,7 @@ async def test_date_picker_theme(flet_app: ftt.FletTestApp, request): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "theme1", + request.node.name, await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), From 46555d3ca87cc960988299046eec4eadcf3cff01 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Tue, 11 Nov 2025 12:42:50 +0100 Subject: [PATCH 2/6] rename files to use _ instead of - --- .../{basic-auth.py => basic_auth.py} | 0 ...asic-auth-async.py => basic_auth_async.py} | 0 ...py => check_auth_results_and_toggle_ui.py} | 0 ....py => github_oauth_with_listing_repos.py} | 0 ... github_oauth_with_listing_repos_async.py} | 0 .../{linkedin-login.py => linkedin_login.py} | 0 ...g_tool.py => 05_free_hand_drawing_tool.py} | 0 ...py => 02_pre_defined_theme_text_styles.py} | 0 ...er-accessible.py => counter_accessible.py} | 0 .../{edit-form.py => edit_form.py} | 0 .../{progress-bar.py => progress_bar.py} | 0 .../{tic-tac-toe.py => tic_tac_toe.py} | 0 ...e.py => building_views_on_route_change.py} | 0 .../{home-store.py => home_store.py} | 0 .../{initial-route.py => initial_route.py} | 0 ...-change-event.py => route_change_event.py} | 0 ...te.py => user_control_with_auto_update.py} | 0 sdk/python/examples/publish-gallery.sh | 2 +- .../{step1-field-gd.py => step1_field_gd.py} | 0 .../{step2-field-gd.py => step2_field_gd.py} | 0 .../{step3-field-gd.py => step3_field_gd.py} | 0 .../{step4-field-gd.py => step4_field_gd.py} | 0 .../{step5-field-gd.py => step5_field_gd.py} | 0 .../{step6-field-gd.py => step6_field_gd.py} | 0 .../{step7-field-gd.py => step7_field_gd.py} | 0 .../{step8-field-gd.py => step8_field_gd.py} | 0 .../tutorials/todo/{step-1.py => step_1.py} | 0 .../tutorials/todo/{step-2.py => step_2.py} | 0 .../tutorials/todo/{step-3.py => step_3.py} | 0 .../tutorials/todo/{step-4.py => step_4.py} | 0 .../{todo-reactive.py => todo_reactive.py} | 0 .../src/flet_cli/__pyinstaller/hook-flet.py | 2 - .../flet/docs/cookbook/authentication.md | 4 +- .../docs/cookbook/navigation-and-routing.md | 2 +- .../packages/flet/docs/tutorials/solitaire.md | 40 +++++++++---------- 35 files changed, 24 insertions(+), 26 deletions(-) rename sdk/python/examples/apps/authentication/{basic-auth.py => basic_auth.py} (100%) rename sdk/python/examples/apps/authentication/{basic-auth-async.py => basic_auth_async.py} (100%) rename sdk/python/examples/apps/authentication/{check-auth-results-and-toggle-ui.py => check_auth_results_and_toggle_ui.py} (100%) rename sdk/python/examples/apps/authentication/{github-oauth-with-listing-repos.py => github_oauth_with_listing_repos.py} (100%) rename sdk/python/examples/apps/authentication/{github-oauth-with-listing-repos-async.py => github_oauth_with_listing_repos_async.py} (100%) rename sdk/python/examples/apps/authentication/{linkedin-login.py => linkedin_login.py} (100%) rename sdk/python/examples/apps/controls-gallery/examples/displays/canvas/{05_free-hand_drawing_tool.py => 05_free_hand_drawing_tool.py} (100%) rename sdk/python/examples/apps/controls-gallery/examples/displays/text/{02_pre-defined_theme_text_styles.py => 02_pre_defined_theme_text_styles.py} (100%) rename sdk/python/examples/apps/counter/{counter-accessible.py => counter_accessible.py} (100%) rename sdk/python/examples/apps/declarative/{edit-form.py => edit_form.py} (100%) rename sdk/python/examples/apps/declarative/{progress-bar.py => progress_bar.py} (100%) rename sdk/python/examples/apps/declarative/{tic-tac-toe.py => tic_tac_toe.py} (100%) rename sdk/python/examples/apps/routing-navigation/{building-views-on-route-change.py => building_views_on_route_change.py} (100%) rename sdk/python/examples/apps/routing-navigation/{home-store.py => home_store.py} (100%) rename sdk/python/examples/apps/routing-navigation/{initial-route.py => initial_route.py} (100%) rename sdk/python/examples/apps/routing-navigation/{route-change-event.py => route_change_event.py} (100%) rename sdk/python/examples/cookbook/{user-control-with-auto-update.py => user_control_with_auto_update.py} (100%) rename sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/{step1-field-gd.py => step1_field_gd.py} (100%) rename sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/{step2-field-gd.py => step2_field_gd.py} (100%) rename sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/{step3-field-gd.py => step3_field_gd.py} (100%) rename sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/{step4-field-gd.py => step4_field_gd.py} (100%) rename sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/{step5-field-gd.py => step5_field_gd.py} (100%) rename sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/{step6-field-gd.py => step6_field_gd.py} (100%) rename sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/{step7-field-gd.py => step7_field_gd.py} (100%) rename sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/{step8-field-gd.py => step8_field_gd.py} (100%) rename sdk/python/examples/tutorials/todo/{step-1.py => step_1.py} (100%) rename sdk/python/examples/tutorials/todo/{step-2.py => step_2.py} (100%) rename sdk/python/examples/tutorials/todo/{step-3.py => step_3.py} (100%) rename sdk/python/examples/tutorials/todo/{step-4.py => step_4.py} (100%) rename sdk/python/examples/tutorials/todo/todo/{todo-reactive.py => todo_reactive.py} (100%) diff --git a/sdk/python/examples/apps/authentication/basic-auth.py b/sdk/python/examples/apps/authentication/basic_auth.py similarity index 100% rename from sdk/python/examples/apps/authentication/basic-auth.py rename to sdk/python/examples/apps/authentication/basic_auth.py diff --git a/sdk/python/examples/apps/authentication/basic-auth-async.py b/sdk/python/examples/apps/authentication/basic_auth_async.py similarity index 100% rename from sdk/python/examples/apps/authentication/basic-auth-async.py rename to sdk/python/examples/apps/authentication/basic_auth_async.py diff --git a/sdk/python/examples/apps/authentication/check-auth-results-and-toggle-ui.py b/sdk/python/examples/apps/authentication/check_auth_results_and_toggle_ui.py similarity index 100% rename from sdk/python/examples/apps/authentication/check-auth-results-and-toggle-ui.py rename to sdk/python/examples/apps/authentication/check_auth_results_and_toggle_ui.py diff --git a/sdk/python/examples/apps/authentication/github-oauth-with-listing-repos.py b/sdk/python/examples/apps/authentication/github_oauth_with_listing_repos.py similarity index 100% rename from sdk/python/examples/apps/authentication/github-oauth-with-listing-repos.py rename to sdk/python/examples/apps/authentication/github_oauth_with_listing_repos.py diff --git a/sdk/python/examples/apps/authentication/github-oauth-with-listing-repos-async.py b/sdk/python/examples/apps/authentication/github_oauth_with_listing_repos_async.py similarity index 100% rename from sdk/python/examples/apps/authentication/github-oauth-with-listing-repos-async.py rename to sdk/python/examples/apps/authentication/github_oauth_with_listing_repos_async.py diff --git a/sdk/python/examples/apps/authentication/linkedin-login.py b/sdk/python/examples/apps/authentication/linkedin_login.py similarity index 100% rename from sdk/python/examples/apps/authentication/linkedin-login.py rename to sdk/python/examples/apps/authentication/linkedin_login.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/canvas/05_free-hand_drawing_tool.py b/sdk/python/examples/apps/controls-gallery/examples/displays/canvas/05_free_hand_drawing_tool.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/canvas/05_free-hand_drawing_tool.py rename to sdk/python/examples/apps/controls-gallery/examples/displays/canvas/05_free_hand_drawing_tool.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/02_pre-defined_theme_text_styles.py b/sdk/python/examples/apps/controls-gallery/examples/displays/text/02_pre_defined_theme_text_styles.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/02_pre-defined_theme_text_styles.py rename to sdk/python/examples/apps/controls-gallery/examples/displays/text/02_pre_defined_theme_text_styles.py diff --git a/sdk/python/examples/apps/counter/counter-accessible.py b/sdk/python/examples/apps/counter/counter_accessible.py similarity index 100% rename from sdk/python/examples/apps/counter/counter-accessible.py rename to sdk/python/examples/apps/counter/counter_accessible.py diff --git a/sdk/python/examples/apps/declarative/edit-form.py b/sdk/python/examples/apps/declarative/edit_form.py similarity index 100% rename from sdk/python/examples/apps/declarative/edit-form.py rename to sdk/python/examples/apps/declarative/edit_form.py diff --git a/sdk/python/examples/apps/declarative/progress-bar.py b/sdk/python/examples/apps/declarative/progress_bar.py similarity index 100% rename from sdk/python/examples/apps/declarative/progress-bar.py rename to sdk/python/examples/apps/declarative/progress_bar.py diff --git a/sdk/python/examples/apps/declarative/tic-tac-toe.py b/sdk/python/examples/apps/declarative/tic_tac_toe.py similarity index 100% rename from sdk/python/examples/apps/declarative/tic-tac-toe.py rename to sdk/python/examples/apps/declarative/tic_tac_toe.py diff --git a/sdk/python/examples/apps/routing-navigation/building-views-on-route-change.py b/sdk/python/examples/apps/routing-navigation/building_views_on_route_change.py similarity index 100% rename from sdk/python/examples/apps/routing-navigation/building-views-on-route-change.py rename to sdk/python/examples/apps/routing-navigation/building_views_on_route_change.py diff --git a/sdk/python/examples/apps/routing-navigation/home-store.py b/sdk/python/examples/apps/routing-navigation/home_store.py similarity index 100% rename from sdk/python/examples/apps/routing-navigation/home-store.py rename to sdk/python/examples/apps/routing-navigation/home_store.py diff --git a/sdk/python/examples/apps/routing-navigation/initial-route.py b/sdk/python/examples/apps/routing-navigation/initial_route.py similarity index 100% rename from sdk/python/examples/apps/routing-navigation/initial-route.py rename to sdk/python/examples/apps/routing-navigation/initial_route.py diff --git a/sdk/python/examples/apps/routing-navigation/route-change-event.py b/sdk/python/examples/apps/routing-navigation/route_change_event.py similarity index 100% rename from sdk/python/examples/apps/routing-navigation/route-change-event.py rename to sdk/python/examples/apps/routing-navigation/route_change_event.py diff --git a/sdk/python/examples/cookbook/user-control-with-auto-update.py b/sdk/python/examples/cookbook/user_control_with_auto_update.py similarity index 100% rename from sdk/python/examples/cookbook/user-control-with-auto-update.py rename to sdk/python/examples/cookbook/user_control_with_auto_update.py diff --git a/sdk/python/examples/publish-gallery.sh b/sdk/python/examples/publish-gallery.sh index 6181c770aa..a7056ad33e 100644 --- a/sdk/python/examples/publish-gallery.sh +++ b/sdk/python/examples/publish-gallery.sh @@ -7,7 +7,7 @@ flet publish python/apps/icons-cupertino-browser/main.py --distpath $DIST_PATH/i flet publish python/tutorials/calc/calc.py --distpath $DIST_PATH/calculator --base-url calculator --app-name "Calculator" --app-description "A simple calculator app written in Flet." flet publish python/tutorials/solitaire/solitaire-final-part1/main.py --distpath $DIST_PATH/solitaire --base-url solitaire --assets assets --app-name "Solitaire" --app-description "Learn how to handle gestures and position controls on a page." flet publish python/apps/trolli/src/main.py --distpath $DIST_PATH/trolli --base-url trolli --assets ../assets --route-url-strategy "hash" --app-name "Trolli" --app-description "A clone of Trello." -flet publish python/apps/routing-navigation/home-store.py --distpath $DIST_PATH/simple-routing --base-url simple-routing --route-url-strategy "hash" --app-name "Flet routing example" --app-description "An example of routing in Flet." +flet publish python/apps/routing-navigation/home_store.py --distpath $DIST_PATH/simple-routing --base-url simple-routing --route-url-strategy "hash" --app-name "Flet routing example" --app-description "An example of routing in Flet." flet publish python/apps/counter/counter.py --distpath $DIST_PATH/counter --base-url counter --app-name "Counter" --app-description "Counter to get an idea of Flet." flet publish python/apps/flet-animation/main.py --distpath $DIST_PATH/flet-animation --base-url flet-animation --app-name "Flet animation" --app-description "An example of implicit animations in Flet." flet publish python/apps/greeter/greeter.py --distpath $DIST_PATH/greeter --base-url greeter --app-name "Greeter" --app-description "A basic example of interactive forms in Flet." diff --git a/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step1-field-gd.py b/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step1_field_gd.py similarity index 100% rename from sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step1-field-gd.py rename to sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step1_field_gd.py diff --git a/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step2-field-gd.py b/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step2_field_gd.py similarity index 100% rename from sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step2-field-gd.py rename to sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step2_field_gd.py diff --git a/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step3-field-gd.py b/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step3_field_gd.py similarity index 100% rename from sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step3-field-gd.py rename to sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step3_field_gd.py diff --git a/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step4-field-gd.py b/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step4_field_gd.py similarity index 100% rename from sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step4-field-gd.py rename to sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step4_field_gd.py diff --git a/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step5-field-gd.py b/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step5_field_gd.py similarity index 100% rename from sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step5-field-gd.py rename to sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step5_field_gd.py diff --git a/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step6-field-gd.py b/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step6_field_gd.py similarity index 100% rename from sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step6-field-gd.py rename to sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step6_field_gd.py diff --git a/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step7-field-gd.py b/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step7_field_gd.py similarity index 100% rename from sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step7-field-gd.py rename to sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step7_field_gd.py diff --git a/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step8-field-gd.py b/sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step8_field_gd.py similarity index 100% rename from sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step8-field-gd.py rename to sdk/python/examples/tutorials/solitaire_declarative/drag-and-drop/step8_field_gd.py diff --git a/sdk/python/examples/tutorials/todo/step-1.py b/sdk/python/examples/tutorials/todo/step_1.py similarity index 100% rename from sdk/python/examples/tutorials/todo/step-1.py rename to sdk/python/examples/tutorials/todo/step_1.py diff --git a/sdk/python/examples/tutorials/todo/step-2.py b/sdk/python/examples/tutorials/todo/step_2.py similarity index 100% rename from sdk/python/examples/tutorials/todo/step-2.py rename to sdk/python/examples/tutorials/todo/step_2.py diff --git a/sdk/python/examples/tutorials/todo/step-3.py b/sdk/python/examples/tutorials/todo/step_3.py similarity index 100% rename from sdk/python/examples/tutorials/todo/step-3.py rename to sdk/python/examples/tutorials/todo/step_3.py diff --git a/sdk/python/examples/tutorials/todo/step-4.py b/sdk/python/examples/tutorials/todo/step_4.py similarity index 100% rename from sdk/python/examples/tutorials/todo/step-4.py rename to sdk/python/examples/tutorials/todo/step_4.py diff --git a/sdk/python/examples/tutorials/todo/todo/todo-reactive.py b/sdk/python/examples/tutorials/todo/todo/todo_reactive.py similarity index 100% rename from sdk/python/examples/tutorials/todo/todo/todo-reactive.py rename to sdk/python/examples/tutorials/todo/todo/todo_reactive.py diff --git a/sdk/python/packages/flet-cli/src/flet_cli/__pyinstaller/hook-flet.py b/sdk/python/packages/flet-cli/src/flet_cli/__pyinstaller/hook-flet.py index 6338d355d4..9e13c0a10b 100644 --- a/sdk/python/packages/flet-cli/src/flet_cli/__pyinstaller/hook-flet.py +++ b/sdk/python/packages/flet-cli/src/flet_cli/__pyinstaller/hook-flet.py @@ -1,5 +1,3 @@ -import os - import flet_cli.__pyinstaller.config as hook_config from flet_cli.__pyinstaller.utils import get_flet_bin_path diff --git a/sdk/python/packages/flet/docs/cookbook/authentication.md b/sdk/python/packages/flet/docs/cookbook/authentication.md index e74f4d9b18..62fb6967e6 100644 --- a/sdk/python/packages/flet/docs/cookbook/authentication.md +++ b/sdk/python/packages/flet/docs/cookbook/authentication.md @@ -339,7 +339,7 @@ if ejt: page.login(provider, saved_token=jt) ``` -[See complete app example](https://github.com/flet-dev/flet/blob/main/sdk/python/examples/apps/authentication/github-oauth-with-listing-repos.py). +[See complete app example](https://github.com/flet-dev/flet/blob/main/sdk/python/examples/apps/authentication/github_oauth_with_listing_repos.py). ## Signing out @@ -353,7 +353,7 @@ async def logout_button_click(e): page.logout() ``` -[See complete app example](https://github.com/flet-dev/flet/blob/main/sdk/python/examples/apps/authentication/github-oauth-with-listing-repos.py). +[See complete app example](https://github.com/flet-dev/flet/blob/main/sdk/python/examples/apps/authentication/github_oauth_with_listing_repos.py). ## Customizing authorization flow diff --git a/sdk/python/packages/flet/docs/cookbook/navigation-and-routing.md b/sdk/python/packages/flet/docs/cookbook/navigation-and-routing.md index e8187f8855..4d6ed5c36b 100644 --- a/sdk/python/packages/flet/docs/cookbook/navigation-and-routing.md +++ b/sdk/python/packages/flet/docs/cookbook/navigation-and-routing.md @@ -11,7 +11,7 @@ Well, it took [more efforts](https://github.com/flet-dev/flet/pull/95/files) tha {{ image("../assets/navigation-routing/routing-app-example.gif", alt="Routing app example") }} -Explore [source code](https://github.com/flet-dev/flet/blob/main/sdk/python/examples/apps/routing-navigation/building-views-on-route-change.py) of the example above. +Explore [source code](https://github.com/flet-dev/flet/blob/main/sdk/python/examples/apps/routing-navigation/building_views_on_route_change.py) of the example above. ## Page route diff --git a/sdk/python/packages/flet/docs/tutorials/solitaire.md b/sdk/python/packages/flet/docs/tutorials/solitaire.md index 66f2504a56..2fe76402cf 100644 --- a/sdk/python/packages/flet/docs/tutorials/solitaire.md +++ b/sdk/python/packages/flet/docs/tutorials/solitaire.md @@ -54,9 +54,9 @@ Run this app and you will see a new window with a greeting: For the proof of concept, we will only be using three types of controls: -* [`Stack`][flet.Stack] - will be used as a parent control for absolute positioning of slots and cards -* [`GestureDetector`][flet.GestureDetector] - the card that will be moved within the [`Stack`][flet.Stack] -* [`Container`][flet.Container] - the slot where the card will be dropped. Will also be used as `content` for the [`GestureDetector`][flet.GestureDetector]. +* [`Stack`][flet.] - will be used as a parent control for absolute positioning of slots and cards +* [`GestureDetector`][flet.] - the card that will be moved within the [`Stack`][flet.] +* [`Container`][flet.] - the slot where the card will be dropped. Will also be used as `content` for the [`GestureDetector`][flet.]. We have broken down the proof of concept app into four easy steps, so that after each step you have a complete short program to run and test. @@ -65,8 +65,8 @@ a complete short program to run and test. In this step we will create a [`Stack`][flet.Stack] (Solitaire game field) and a [`GestureDetector`][flet.GestureDetector] (Solitaire card). -The card will then be added to the list of the [`Stack.controls`][flet.Stack.controls]. -[`top`][flet.GestureDetector.top] and [`left`][flet.GestureDetector.left] properties of the +The card will then be added to the list of the [`Stack.controls`][flet.]. +[`top`][flet.GestureDetector.] and [`left`][flet.GestureDetector.] properties of the `GestureDetector` are used for absolute positioning of the card in the `Stack`. ```python @@ -89,11 +89,11 @@ Run the app to see the card added to the stack: {{ image("../examples/tutorials/solitaire/media/drag-and-drop1.png", alt="drag_and_drop1", width="80%") }} -To be able to move the card, we'll create a `drag` method that will be called in [`on_pan_update`][flet.GestureDetector.on_pan_update] -event of `GestureDetector` which happens every [`drag_interval`][flet.GestureDetector.drag_interval] while the user drags the card with their mouse. +To be able to move the card, we'll create a `drag` method that will be called in [`on_pan_update`][flet.GestureDetector.] +event of `GestureDetector` which happens every [`drag_interval`][flet.GestureDetector.] while the user drags the card with their mouse. -To show the card's movement, we’ll be updating the card’s [`top`][flet.GestureDetector.top] and [`left`][flet.GestureDetector.left] properties in the `drag` -callback each time the [`on_pan_update`][flet.GestureDetector.on_pan_update] event happens. +To show the card's movement, we’ll be updating the card’s [`top`][flet.GestureDetector.] and [`left`][flet.GestureDetector.] properties in the `drag` +callback each time the [`on_pan_update`][flet.GestureDetector.] event happens. Below is the simplest code for dragging `GestureDetector` in `Stack`: @@ -139,7 +139,7 @@ The goal of this step is to be able to drop a card into a slot if it is close en {{ image("../examples/tutorials/solitaire/media/drag-and-drop3.gif", alt="drag-and-drop3", width="50%") }} -Let’s create a [`Container`][flet.Container] control that will represent a slot to which we’ll be dropping the card: +Let’s create a [`Container`][flet.] control that will represent a slot to which we’ll be dropping the card: ```python slot = ft.Container( @@ -189,7 +189,7 @@ Now, if the card is not close enough, we need to bounce it back to its original Unfortunately, we don’t know the original position coordinates, since the card’s `top` and `left` properties were changed on `on_pan_update` event. To solve this problem, let’s create a `Solitaire` class object to keep track of the original position of -the card when [`on_pan_start`][flet.GestureDetector.on_pan_start] event of the card is called: +the card when [`on_pan_start`][flet.GestureDetector.] event of the card is called: ```python class Solitaire: @@ -205,7 +205,7 @@ def start_drag(e: ft.DragStartEvent): e.control.update() ``` -Now let’s update [`on_pan_end`][flet.GestureDetector.on_pan_end] event with the option to bounce card back: +Now let’s update [`on_pan_end`][flet.GestureDetector.] event with the option to bounce card back: ```python def bounce_back(game, card): """return card to its original position""" @@ -255,8 +255,8 @@ yellow card (`card2`) is moving as expected but the green the card (`card1`) is {{ image("../examples/tutorials/solitaire/media/drag-and-drop4.gif", alt="drag_and_drop4.gif", width="80%") }} -It happens because `card2` is added to the list of stack's [`controls`][flet.Stack.controls] after `card1`. To fix this problem, -we need to move the draggable card to the top of the list of controls on [`on_pan_start`][flet.GestureDetector.on_pan_start] event: +It happens because `card2` is added to the list of stack's [`controls`][flet.Stack.] after `card1`. To fix this problem, +we need to move the draggable card to the top of the list of controls on [`on_pan_start`][flet.GestureDetector.] event: ```python def move_on_top(card, controls): @@ -332,7 +332,7 @@ As a result, the two cards can be dragged between the three slots: The full code for this step can be found [here](https://github.com/flet-dev/flet/blob/main/sdk/python/examples/tutorials/solitaire/solitaire-drag-and-drop/step4.py). Congratulations on completing the proof of concept app for the Solitaire game! -Now you can work with [`GestureDetector`][flet.GestureDetector] to move cards inside [`Stack`][flet.Stack] and place them to +Now you can work with [`GestureDetector`][flet.] to move cards inside [`Stack`][flet.] and place them to certain `Container`s, which is a great part of the game to begin with. ## Fanned card piles @@ -358,7 +358,7 @@ Let’s restructure our program and get it ready for the implementation of the f ### Slot, Card and Solitaire classes A slot could have a `pile` property that would hold a list of cards that were placed there. -Now the slot is a [`Container`][flet.Container] control object, and we can’t add any new properties to it. +Now the slot is a [`Container`][flet.] control object, and we can’t add any new properties to it. Let’s create a new `Slot` class that will inherit from `Container` and add a `pile` property to it: ```python @@ -379,7 +379,7 @@ class Slot(ft.Container): ``` Similarly to `Slot` class, let’s create a new `Card` class with `slot` property to remember in which slot it resides. -It will inherit from [`GestureDetector`][flet.GestureDetector] and we’ll move all card-related methods to it: +It will inherit from [`GestureDetector`][flet.] and we’ll move all card-related methods to it: ```python CARD_WIDTH = 70 CARD_HEIGHT = 100 @@ -447,7 +447,7 @@ Since each card has `slot` property now, there is no need to remember `start_lef position of the draggable card in Solitaire class anymore, because we can just bounce it back to its slot. /// -Let’s update `Solitaire` class to inherit from [`Stack`][flet.Stack], and move the creation of cards and slots there: +Let’s update `Solitaire` class to inherit from [`Stack`][flet.], and move the creation of cards and slots there: ```python SOLITAIRE_WIDTH = 1000 @@ -1220,9 +1220,9 @@ Now it's time to share your app with the world! In this tutorial, you have learnt how to: * [Create](../getting-started/create-flet-app.md) a simple Flet app; -* Drag and drop cards with [`GestureDetector`][flet.GestureDetector]; +* Drag and drop cards with [`GestureDetector`][flet.]; * [Create your own classes](../cookbook/custom-controls.md) that inherit from Flet controls; -* Design UI layout using absolute positioning of controls in [`Stack`][flet.Stack]; +* Design UI layout using absolute positioning of controls in [`Stack`][flet.]; * Implement [implicit animations](../cookbook/animations.md); * [Deploy](../publish/web/index.md) your Flet app to the web; From 7cb94b13fcb6d74aed3a4542d0afdc1ae8b919ee Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Sat, 22 Nov 2025 02:20:23 +0100 Subject: [PATCH 3/6] fix CI --- .../golden/macos/divider/divider_basic.png | Bin 319 -> 0 bytes .../macos/divider/divider_properties.png | Bin 754 -> 0 bytes .../{divider_radius.png => radius.png} | Bin .../material/golden/macos/divider/theme_1.png | Bin 749 -> 0 bytes .../material/test_menu_item_button.py | 2 +- .../controls/material/test_navigation_rail.py | 4 +-- .../macos/date_range_picker_theme/theme_1.png | Bin 0 -> 65895 bytes .../test_date_range_picker_theme.py | 23 +++++++++--------- 8 files changed, 15 insertions(+), 14 deletions(-) delete mode 100644 sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/divider_basic.png delete mode 100644 sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/divider_properties.png rename sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/{divider_radius.png => radius.png} (100%) delete mode 100644 sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/theme_1.png create mode 100644 sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/date_range_picker_theme/theme_1.png rename sdk/python/packages/flet/integration_tests/controls/{material => theme}/test_date_range_picker_theme.py (71%) diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/divider_basic.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/divider_basic.png deleted file mode 100644 index 20beececec3c17a6e6e5d59e040fef670b13f1bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 319 zcmeAS@N?(olHy`uVBq!ia0y~yV3Po{6*$;{jMYzwf+Z0h@l| h^cg-HSpzrLL6QGt9&=34w|UP&VxF#kF6*2UngE)XCDH%@ diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/divider_properties.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/divider_properties.png deleted file mode 100644 index 3f1e991ffef6410cf20b9a8eb0044487c76d5731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 754 zcmeAS@N?(olHy`uVBq!ia0y~yV3Po{Q#jawWQmd$BamV&4sv&5Sa(k5C6L2X?Bp53 z0R%N1DIE+9OmjS4978JRyuEplw?RR~#qmjwt(n7J69?OSTbVgJA0`_GAGChIj0LE3 z6yOU1hx3B621V0fcjkdrHC#P+YumjK#U&6uAME)+5yHTbFsm69C8L0F2s}vE|D(vl T5zw8z9i-UP)z4*}Q$iB}3m-7I diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/divider_radius.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/radius.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/divider_radius.png rename to sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/radius.png diff --git a/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/theme_1.png b/sdk/python/packages/flet/integration_tests/controls/material/golden/macos/divider/theme_1.png deleted file mode 100644 index 26d3db5b781dac7510fa8b098040cefe4690a127..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749 zcmeAS@N?(olHy`uVBq!ia0y~yVEO@MpWt8vl5>wwO$Snp#X;^)4C~IxyaaMsik&<| zIDnvrBc%hVdb+2JV@SoEx7QX5HW-Mo9(1Vf2+-vCrOefv_^jQ0x9FTb*MPc40cHp^ z%#U8hd@sj+|7vLlh6jajpI_nM8^#V)ci#{g1p-GNFf%v^H1jhsIP%y5!yTI-rlF%E cpb$8d%;03lA~HdLwmFFF>FVdQ&MBb@0ATSqH2?qr diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_menu_item_button.py b/sdk/python/packages/flet/integration_tests/controls/material/test_menu_item_button.py index 83b10bae1e..62e9a83e8a 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_menu_item_button.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_menu_item_button.py @@ -5,7 +5,7 @@ @pytest.mark.asyncio(loop_scope="module") -async def test_menu_item_button_basic(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.MenuItemButton("Click me"), diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_navigation_rail.py b/sdk/python/packages/flet/integration_tests/controls/material/test_navigation_rail.py index 9307c40002..49ea3d6252 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_navigation_rail.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_navigation_rail.py @@ -11,7 +11,7 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_navigation_rail(flet_app: ftt.FletTestApp, request): +async def test_basic(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.NavigationRail( @@ -51,7 +51,7 @@ async def test_navigation_rail(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="function") -async def test_navigation_rail_no_selected_icon(flet_app: ftt.FletTestApp, request): +async def test_no_selected_icon(flet_app: ftt.FletTestApp, request): await flet_app.assert_control_screenshot( request.node.name, ft.NavigationRail( diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/date_range_picker_theme/theme_1.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/date_range_picker_theme/theme_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d9c72e2f5ae816963c0dea87faebb9fe45ca2e GIT binary patch literal 65895 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 WM^1h)=m4Ex<9y8RkJ=+4SN{j_V!3kw literal 0 HcmV?d00001 diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_date_range_picker_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_date_range_picker_theme.py similarity index 71% rename from sdk/python/packages/flet/integration_tests/controls/material/test_date_range_picker_theme.py rename to sdk/python/packages/flet/integration_tests/controls/theme/test_date_range_picker_theme.py index 5719173491..44e975b4b0 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_date_range_picker_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_date_range_picker_theme.py @@ -14,7 +14,7 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_date_picker_theme(flet_app: ftt.FletTestApp, request): +async def test_theme_1(flet_app: ftt.FletTestApp, request): flet_app.page.theme = ft.Theme( date_picker_theme=ft.DatePickerTheme( bgcolor=ft.Colors.GREEN_200, @@ -32,21 +32,22 @@ async def test_date_picker_theme(flet_app: ftt.FletTestApp, request): ) ) - dp = ft.DateRangePicker( - current_date=datetime.datetime(year=2025, month=8, day=15), - first_date=datetime.datetime(year=2000, month=10, day=1), - last_date=datetime.datetime(year=2025, month=10, day=1), - start_value=datetime.datetime(year=2000, month=10, day=7), - end_value=datetime.datetime(year=2000, month=10, day=15), - ) flet_app.page.enable_screenshots = True - flet_app.resize_page(400, 600) - flet_app.page.show_dialog(dp) + flet_app.resize_page(500, 600) flet_app.page.update() + flet_app.page.show_dialog( + ft.DateRangePicker( + current_date=datetime.datetime(year=2025, month=8, day=15), + first_date=datetime.datetime(year=2000, month=10, day=1), + last_date=datetime.datetime(year=2025, month=10, day=1), + start_value=datetime.datetime(year=2000, month=10, day=7), + end_value=datetime.datetime(year=2000, month=10, day=15), + ) + ) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "theme1", + request.node.name, await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), From 4d28a66e4b8d508cb2905a609046c8f8fd578e41 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Sat, 22 Nov 2025 14:08:37 +0100 Subject: [PATCH 4/6] update theme tests --- .../controls/material/test_data_table.py | 72 ----------------- .../material/test_date_range_picker.py | 52 +++++++------ ...alette.png => theme_1_accents_palette.png} | Bin .../{buttons.png => theme_1_buttons.png} | Bin ...or_banner.png => theme_1_error_banner.png} | Bin ...alette.png => theme_1_primary_palette.png} | Bin ...ette.png => theme_1_secondary_palette.png} | Bin ...ce_roles.png => theme_1_surface_roles.png} | Bin ...lette.png => theme_1_tertiary_palette.png} | Bin ...hemed_card.png => theme_1_themed_card.png} | Bin .../golden/macos/data_table_theme/theme_1.png | Bin 0 -> 25325 bytes .../{collapsed.png => theme_1_collapsed.png} | Bin .../{expanded.png => theme_1_expanded.png} | Bin ...isabled.png => theme_1_focus_disabled.png} | Bin .../{theme_hover.png => theme_1_hover.png} | Bin .../{theme_normal.png => theme_1_normal.png} | Bin .../{theme1.png => theme_1.png} | Bin .../controls/theme/test_button_theme.py | 26 ++----- .../controls/theme/test_color_scheme.py | 54 ++++++------- .../controls/theme/test_data_table_theme.py | 73 ++++++++++++++++++ .../controls/theme/test_date_picker_theme.py | 17 ++-- .../theme/test_date_range_picker_theme.py | 6 +- .../theme/test_expansion_tile_theme.py | 6 +- .../theme/test_filled_button_theme.py | 22 +----- .../test_floating_action_button_theme.py | 8 +- .../controls/theme/test_icon_button_theme.py | 22 +----- .../controls/theme/test_list_tile_theme.py | 9 +-- .../theme/test_outlined_button_theme.py | 21 +---- .../controls/theme/test_text_button_theme.py | 22 +----- 29 files changed, 171 insertions(+), 239 deletions(-) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/{accents_palette.png => theme_1_accents_palette.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/{buttons.png => theme_1_buttons.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/{error_banner.png => theme_1_error_banner.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/{primary_palette.png => theme_1_primary_palette.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/{secondary_palette.png => theme_1_secondary_palette.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/{surface_roles.png => theme_1_surface_roles.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/{tertiary_palette.png => theme_1_tertiary_palette.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/{themed_card.png => theme_1_themed_card.png} (100%) create mode 100644 sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/data_table_theme/theme_1.png rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/expansion_tile_theme/{collapsed.png => theme_1_collapsed.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/expansion_tile_theme/{expanded.png => theme_1_expanded.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/{theme_focus_disabled.png => theme_1_focus_disabled.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/{theme_hover.png => theme_1_hover.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/{theme_normal.png => theme_1_normal.png} (100%) rename sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/list_tile_theme/{theme1.png => theme_1.png} (100%) create mode 100644 sdk/python/packages/flet/integration_tests/controls/theme/test_data_table_theme.py diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_data_table.py b/sdk/python/packages/flet/integration_tests/controls/material/test_data_table.py index 62c226908a..f637caf357 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_data_table.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_data_table.py @@ -32,75 +32,3 @@ async def test_basic(flet_app: ftt.FletTestApp, request): ], ), ) - - -@pytest.mark.asyncio(loop_scope="function") -async def test_theme(flet_app: ftt.FletTestApp): - flet_app.resize_page(400, 600) - flet_app.page.theme = ft.Theme( - data_table_theme=ft.DataTableTheme( - checkbox_horizontal_margin=10, - column_spacing=50, - data_row_max_height=200, - data_row_min_height=0, - data_row_color=ft.Colors.GREEN_200, - data_text_style=ft.TextStyle(color=ft.Colors.GREEN_800), - divider_thickness=10, - horizontal_margin=20, - heading_text_style=ft.TextStyle(italic=True), - heading_row_color=ft.Colors.ORANGE_200, - heading_row_height=100, - data_row_cursor=ft.MouseCursor.FORBIDDEN, # doesn't show on screenshot - heading_row_alignment=ft.MainAxisAlignment.START, - heading_cell_cursor=ft.MouseCursor.HELP, # doesn't show on screenshot - decoration=ft.BoxDecoration( - shape=ft.BoxShape.RECTANGLE, - bgcolor=ft.Colors.PURPLE_100, - border=ft.Border.all(color=ft.Colors.RED), - ), - ), - divider_theme=ft.DividerTheme( - color=ft.Colors.GREEN, - thickness=5, - ), - ) - - flet_app.page.add( - ft.DataTable( - # bgcolor=ft.Colors.BLUE_100, - show_checkbox_column=True, - # border=ft.Border.all(color=ft.Colors.RED), - # border_radius=30, - columns=[ - ft.DataColumn(label="Column 1"), - ft.DataColumn(label=ft.Text("Column 2")), - ft.DataColumn(label=ft.Text("Column 3")), - ], - rows=[ - ft.DataRow( - on_select_change=lambda e: print(f"Selected row {e.data}"), - cells=[ - ft.DataCell("Item 1"), - ft.DataCell(ft.Text("Item 2")), - ft.DataCell(ft.Text("Item 3")), - ], - ), - ft.DataRow( - on_select_change=lambda e: print(f"Selected row {e.data}"), - cells=[ - ft.DataCell("Item 1"), - ft.DataCell(ft.Text("Item 2")), - ft.DataCell(ft.Text("Item 3")), - ], - ), - ], - ) - ) - await flet_app.tester.pump_and_settle() - - flet_app.assert_screenshot( - "theme_1", - await flet_app.page.take_screenshot( - pixel_ratio=flet_app.screenshots_pixel_ratio - ), - ) diff --git a/sdk/python/packages/flet/integration_tests/controls/material/test_date_range_picker.py b/sdk/python/packages/flet/integration_tests/controls/material/test_date_range_picker.py index 35897d6698..f05f9450ed 100644 --- a/sdk/python/packages/flet/integration_tests/controls/material/test_date_range_picker.py +++ b/sdk/python/packages/flet/integration_tests/controls/material/test_date_range_picker.py @@ -38,34 +38,36 @@ async def test_basic(flet_app: ftt.FletTestApp, request): @pytest.mark.asyncio(loop_scope="function") async def test_properties1(flet_app: ftt.FletTestApp, request): - dp = ft.DateRangePicker( - start_value=datetime.datetime(year=2000, month=10, day=7), - end_value=datetime.datetime(year=2000, month=10, day=15), - first_date=datetime.datetime(year=2000, month=10, day=1), - last_date=datetime.datetime(year=2000, month=11, day=15), - current_date=datetime.datetime(year=2000, month=10, day=16), - switch_to_calendar_icon=ft.Icons.BABY_CHANGING_STATION, - switch_to_input_icon=ft.Icons.ACCESS_ALARM, - save_text="Custom save text", - error_invalid_range_text="Invalid range custom text", - help_text="Custom help text", - cancel_text="Custom cancel text", - confirm_text="Custom confirm text", - error_format_text="Custom error format text", - error_invalid_text="Custom error invalid text", - field_end_hint_text="Custom end hint text", - field_start_hint_text="Custom start hint text", - field_end_label_text="Custom end label text", - field_start_label_text="Custom start label text", - modal=False, - barrier_color=ft.Colors.RED, - keyboard_type=ft.KeyboardType.EMAIL, - # entry_mode=ft.DatePickerEntryMode.CALENDAR, - ) flet_app.page.enable_screenshots = True flet_app.resize_page(400, 600) - flet_app.page.show_dialog(dp) flet_app.page.update() + + flet_app.page.show_dialog( + ft.DateRangePicker( + start_value=datetime.datetime(year=2000, month=10, day=7), + end_value=datetime.datetime(year=2000, month=10, day=15), + first_date=datetime.datetime(year=2000, month=10, day=1), + last_date=datetime.datetime(year=2000, month=11, day=15), + current_date=datetime.datetime(year=2000, month=10, day=16), + switch_to_calendar_icon=ft.Icons.BABY_CHANGING_STATION, + switch_to_input_icon=ft.Icons.ACCESS_ALARM, + save_text="Custom save text", + error_invalid_range_text="Invalid range custom text", + help_text="Custom help text", + cancel_text="Custom cancel text", + confirm_text="Custom confirm text", + error_format_text="Custom error format text", + error_invalid_text="Custom error invalid text", + field_end_hint_text="Custom end hint text", + field_start_hint_text="Custom start hint text", + field_end_label_text="Custom end label text", + field_start_label_text="Custom start label text", + modal=False, + barrier_color=ft.Colors.RED, + keyboard_type=ft.KeyboardType.EMAIL, + # entry_mode=ft.DatePickerEntryMode.CALENDAR, + ) + ) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/accents_palette.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_accents_palette.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/accents_palette.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_accents_palette.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/buttons.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_buttons.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/buttons.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_buttons.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/error_banner.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_error_banner.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/error_banner.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_error_banner.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/primary_palette.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_primary_palette.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/primary_palette.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_primary_palette.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/secondary_palette.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_secondary_palette.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/secondary_palette.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_secondary_palette.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/surface_roles.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_surface_roles.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/surface_roles.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_surface_roles.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/tertiary_palette.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_tertiary_palette.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/tertiary_palette.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_tertiary_palette.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/themed_card.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_themed_card.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/themed_card.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/color_scheme/theme_1_themed_card.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/data_table_theme/theme_1.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/data_table_theme/theme_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c0aab672d2bdb69ffe8600342b5e16a0eb1bae07 GIT binary patch literal 25325 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 literal 0 HcmV?d00001 diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/expansion_tile_theme/collapsed.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/expansion_tile_theme/theme_1_collapsed.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/expansion_tile_theme/collapsed.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/expansion_tile_theme/theme_1_collapsed.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/expansion_tile_theme/expanded.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/expansion_tile_theme/theme_1_expanded.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/expansion_tile_theme/expanded.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/expansion_tile_theme/theme_1_expanded.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_focus_disabled.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_1_focus_disabled.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_focus_disabled.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_1_focus_disabled.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_hover.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_1_hover.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_hover.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_1_hover.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_normal.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_1_normal.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_normal.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/floating_action_button_theme/theme_1_normal.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/list_tile_theme/theme1.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/list_tile_theme/theme_1.png similarity index 100% rename from sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/list_tile_theme/theme1.png rename to sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/list_tile_theme/theme_1.png diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_button_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_button_theme.py index 3097fb58dc..1f46911712 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_button_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_button_theme.py @@ -12,36 +12,20 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_button_theme(flet_app: ftt.FletTestApp): +async def test_theme_1(flet_app: ftt.FletTestApp, request): + flet_app.resize_page(400, 600) flet_app.page.theme = ft.Theme( button_theme=ft.ButtonTheme( style=ft.ButtonStyle( bgcolor=ft.Colors.GREEN, - shape=ft.BeveledRectangleBorder( - radius=5, - ), + shape=ft.BeveledRectangleBorder(radius=5), side=ft.BorderSide(width=5, color=ft.Colors.GREEN_900), padding=ft.Padding.all(10), - # text_style=ft.TextStyle( - # size=15, - # italic=True, - # color=ft.Colors.ORANGE, # color is not shown on the button text, - # # use style.color instead - # ), ), ) ) - flet_app.resize_page(400, 600) - - scr_1 = ft.Screenshot( + await flet_app.assert_control_screenshot( + request.node.name, ft.Button(content="Button"), ) - flet_app.page.add(scr_1) - # flet_app.page.update() - await flet_app.tester.pump_and_settle() - - flet_app.assert_screenshot( - "theme_1", - await scr_1.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), - ) diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_color_scheme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_color_scheme.py index e165b19f8e..151801dfa4 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_color_scheme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_color_scheme.py @@ -12,7 +12,7 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_color_scheme(flet_app: ftt.FletTestApp): +async def test_theme_1(flet_app: ftt.FletTestApp): flet_app.page.theme = ft.Theme( color_scheme=ft.ColorScheme( error=ft.Colors.RED, @@ -69,8 +69,17 @@ async def test_color_scheme(flet_app: ftt.FletTestApp): def swatch(label: str, fill_color: str, text_color: str) -> ft.Container: return ft.Container( + width=100, + height=72, + bgcolor=fill_color, + border_radius=ft.BorderRadius.all(12), + border=ft.Border.all(1, ft.Colors.OUTLINE_VARIANT), + padding=10, content=ft.Column( - [ + alignment=ft.MainAxisAlignment.CENTER, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + spacing=4, + controls=[ ft.Text( label, size=11, @@ -79,16 +88,7 @@ def swatch(label: str, fill_color: str, text_color: str) -> ft.Container: text_align=ft.TextAlign.CENTER, ) ], - alignment=ft.MainAxisAlignment.CENTER, - horizontal_alignment=ft.CrossAxisAlignment.CENTER, - spacing=4, ), - width=100, - height=72, - bgcolor=fill_color, - border_radius=ft.BorderRadius.all(12), - border=ft.Border.all(1, ft.Colors.OUTLINE_VARIANT), - padding=10, ) primary_palette = ft.Screenshot( @@ -276,8 +276,12 @@ def swatch(label: str, fill_color: str, text_color: str) -> ft.Container: key=ft.ScrollKey("themed_card"), bgcolor=ft.Colors.SURFACE_CONTAINER_HIGH, content=ft.Container( + padding=10, content=ft.Column( - [ + spacing=8, + alignment=ft.MainAxisAlignment.START, + horizontal_alignment=ft.CrossAxisAlignment.START, + controls=[ ft.Text( "Card on surface container", size=18, @@ -297,11 +301,7 @@ def swatch(label: str, fill_color: str, text_color: str) -> ft.Container: trailing=ft.Switch(value=True), ), ], - spacing=8, - alignment=ft.MainAxisAlignment.START, - horizontal_alignment=ft.CrossAxisAlignment.START, ), - padding=10, ), ) ) @@ -313,6 +313,9 @@ def swatch(label: str, fill_color: str, text_color: str) -> ft.Container: border_radius=ft.BorderRadius.all(10), padding=ft.Padding.symmetric(horizontal=16, vertical=12), content=ft.Row( + spacing=10, + alignment=ft.MainAxisAlignment.START, + vertical_alignment=ft.CrossAxisAlignment.CENTER, controls=[ ft.Icon(ft.Icons.ERROR, color=ft.Colors.ON_ERROR_CONTAINER), ft.Text( @@ -322,9 +325,6 @@ def swatch(label: str, fill_color: str, text_color: str) -> ft.Container: expand=True, ), ], - spacing=10, - alignment=ft.MainAxisAlignment.START, - vertical_alignment=ft.CrossAxisAlignment.CENTER, ), ) ) @@ -346,55 +346,55 @@ def swatch(label: str, fill_color: str, text_color: str) -> ft.Container: await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "buttons", + "theme_1_buttons", await buttons.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), ) await flet_app.page.scroll_to(scroll_key="primary_palette", duration=0) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "primary_palette", + "theme_1_primary_palette", await primary_palette.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), ) await flet_app.page.scroll_to(scroll_key="secondary_palette", duration=0) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "secondary_palette", + "theme_1_secondary_palette", await secondary_palette.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), ) await flet_app.page.scroll_to(scroll_key="tertiary_palette", duration=0) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "tertiary_palette", + "theme_1_tertiary_palette", await tertiary_palette.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), ) await flet_app.page.scroll_to(scroll_key="surface_roles", duration=0) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "surface_roles", + "theme_1_surface_roles", await surface_palette.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), ) await flet_app.page.scroll_to(scroll_key="accents_palette", duration=0) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "accents_palette", + "theme_1_accents_palette", await accents_palette.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), ) await flet_app.page.scroll_to(scroll_key="themed_card", duration=0) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "themed_card", + "theme_1_themed_card", await themed_card.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), ) await flet_app.page.scroll_to(scroll_key="error_banner", duration=0) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "error_banner", + "theme_1_error_banner", await error_banner.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), ) diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_data_table_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_data_table_theme.py new file mode 100644 index 0000000000..9dab82e948 --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_data_table_theme.py @@ -0,0 +1,73 @@ +import pytest +import pytest_asyncio + +import flet as ft +import flet.testing as ftt + + +# Create a new flet_app instance for each test method +@pytest_asyncio.fixture(scope="function", autouse=True) +def flet_app(flet_app_function): + return flet_app_function + + +@pytest.mark.asyncio(loop_scope="function") +async def test_theme_1(flet_app: ftt.FletTestApp, request): + flet_app.resize_page(400, 600) + flet_app.page.theme = ft.Theme( + data_table_theme=ft.DataTableTheme( + checkbox_horizontal_margin=10, + column_spacing=50, + data_row_max_height=200, + data_row_min_height=0, + data_row_color=ft.Colors.GREEN_200, + data_text_style=ft.TextStyle(color=ft.Colors.GREEN_800), + divider_thickness=10, + horizontal_margin=20, + heading_text_style=ft.TextStyle(italic=True), + heading_row_color=ft.Colors.ORANGE_200, + heading_row_height=100, + data_row_cursor=ft.MouseCursor.FORBIDDEN, # doesn't show on screenshot + heading_row_alignment=ft.MainAxisAlignment.START, + heading_cell_cursor=ft.MouseCursor.HELP, # doesn't show on screenshot + decoration=ft.BoxDecoration( + shape=ft.BoxShape.RECTANGLE, + bgcolor=ft.Colors.PURPLE_100, + border=ft.Border.all(color=ft.Colors.RED), + ), + ), + divider_theme=ft.DividerTheme( + color=ft.Colors.GREEN, + thickness=5, + ), + ) + + await flet_app.assert_control_screenshot( + request.node.name, + ft.DataTable( + show_checkbox_column=True, + columns=[ + ft.DataColumn(label="Column 1"), + ft.DataColumn(label=ft.Text("Column 2")), + ft.DataColumn(label=ft.Text("Column 3")), + ], + rows=[ + ft.DataRow( + on_select_change=lambda e: print(f"Selected row {e.data}"), + cells=[ + ft.DataCell("Item 1"), + ft.DataCell(ft.Text("Item 2")), + ft.DataCell(ft.Text("Item 3")), + ], + ), + ft.DataRow( + on_select_change=lambda e: print(f"Selected row {e.data}"), + cells=[ + ft.DataCell("Item 1"), + ft.DataCell(ft.Text("Item 2")), + ft.DataCell(ft.Text("Item 3")), + ], + ), + ], + ), + ) diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_date_picker_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_date_picker_theme.py index 07978fecb3..d32ec7f4ed 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_date_picker_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_date_picker_theme.py @@ -15,21 +15,22 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") async def test_theme_1(flet_app: ftt.FletTestApp, request): + flet_app.page.enable_screenshots = True + flet_app.resize_page(400, 600) flet_app.page.theme = ft.Theme( date_picker_theme=ft.DatePickerTheme( bgcolor=ft.Colors.GREEN_200, ) ) + flet_app.page.update() - dp = ft.DatePicker( - current_date=datetime.datetime(year=2025, month=8, day=15), - first_date=datetime.datetime(year=2000, month=10, day=1), - last_date=datetime.datetime(year=2025, month=10, day=1), + flet_app.page.show_dialog( + ft.DatePicker( + first_date=datetime.datetime(year=2000, month=10, day=1), + current_date=datetime.datetime(year=2025, month=8, day=15), + last_date=datetime.datetime(year=2025, month=10, day=1), + ) ) - flet_app.page.enable_screenshots = True - flet_app.resize_page(400, 600) - flet_app.page.show_dialog(dp) - flet_app.page.update() await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_date_range_picker_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_date_range_picker_theme.py index 44e975b4b0..199cfe16bd 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_date_range_picker_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_date_range_picker_theme.py @@ -15,6 +15,8 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") async def test_theme_1(flet_app: ftt.FletTestApp, request): + flet_app.page.enable_screenshots = True + flet_app.resize_page(500, 600) flet_app.page.theme = ft.Theme( date_picker_theme=ft.DatePickerTheme( bgcolor=ft.Colors.GREEN_200, @@ -31,10 +33,8 @@ async def test_theme_1(flet_app: ftt.FletTestApp, request): range_selection_overlay_color=ft.Colors.YELLOW_400, ) ) - - flet_app.page.enable_screenshots = True - flet_app.resize_page(500, 600) flet_app.page.update() + flet_app.page.show_dialog( ft.DateRangePicker( current_date=datetime.datetime(year=2025, month=8, day=15), diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_expansion_tile_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_expansion_tile_theme.py index e5abd719e1..21bbfbe61e 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_expansion_tile_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_expansion_tile_theme.py @@ -12,7 +12,7 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_expansion_tile_theme(flet_app: ftt.FletTestApp, request): +async def test_theme_1(flet_app: ftt.FletTestApp, request): flet_app.page.theme = ft.Theme( expansion_tile_theme=ft.ExpansionTileTheme( bgcolor=ft.Colors.GREEN_200, @@ -50,7 +50,7 @@ async def test_expansion_tile_theme(flet_app: ftt.FletTestApp, request): # normal state flet_app.assert_screenshot( - "collapsed", + "theme_1_collapsed", await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), @@ -60,7 +60,7 @@ async def test_expansion_tile_theme(flet_app: ftt.FletTestApp, request): await flet_app.tester.tap(await flet_app.tester.find_by_key("et")) await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "expanded", + "theme_1_expanded", await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_filled_button_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_filled_button_theme.py index 7df590ba5f..5b7744a662 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_filled_button_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_filled_button_theme.py @@ -12,7 +12,8 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_filled_button_theme(flet_app: ftt.FletTestApp): +async def test_theme_1(flet_app: ftt.FletTestApp, request): + flet_app.resize_page(400, 600) flet_app.page.theme = ft.Theme( filled_button_theme=ft.FilledButtonTheme( style=ft.ButtonStyle( @@ -22,26 +23,11 @@ async def test_filled_button_theme(flet_app: ftt.FletTestApp): ), side=ft.BorderSide(width=5, color=ft.Colors.GREEN_900), padding=ft.Padding.all(10), - # text_style=ft.TextStyle( - # size=15, - # italic=True, - # color=ft.Colors.ORANGE, # color is not shown on the button text, - # # use style.color instead - # ), ), ) ) - flet_app.resize_page(400, 600) - - scr_1 = ft.Screenshot( + await flet_app.assert_control_screenshot( + request.node.name, ft.FilledButton(content="Button"), ) - flet_app.page.add(scr_1) - # flet_app.page.update() - await flet_app.tester.pump_and_settle() - - flet_app.assert_screenshot( - "theme_1", - await scr_1.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), - ) diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_floating_action_button_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_floating_action_button_theme.py index af058409a5..6f0cdab340 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_floating_action_button_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_floating_action_button_theme.py @@ -12,7 +12,7 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_theme(flet_app: ftt.FletTestApp, request): +async def test_theme_1(flet_app: ftt.FletTestApp, request): flet_app.page.theme = ft.Theme( floating_action_button_theme=ft.FloatingActionButtonTheme( bgcolor=ft.Colors.ORANGE, @@ -62,7 +62,7 @@ async def test_theme(flet_app: ftt.FletTestApp, request): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "theme_normal", + "theme_1_normal", await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), @@ -75,7 +75,7 @@ async def test_theme(flet_app: ftt.FletTestApp, request): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "theme_focus_disabled", + "theme_1_focus_disabled", await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), @@ -88,7 +88,7 @@ async def test_theme(flet_app: ftt.FletTestApp, request): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "theme_hover", + "theme_1_hover", await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_icon_button_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_icon_button_theme.py index b982e7af3c..1ccd529278 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_icon_button_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_icon_button_theme.py @@ -12,7 +12,8 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_icon_button_theme(flet_app: ftt.FletTestApp): +async def test_theme_1(flet_app: ftt.FletTestApp, request): + flet_app.resize_page(400, 600) flet_app.page.theme = ft.Theme( icon_button_theme=ft.IconButtonTheme( style=ft.ButtonStyle( @@ -22,26 +23,11 @@ async def test_icon_button_theme(flet_app: ftt.FletTestApp): ), side=ft.BorderSide(width=5, color=ft.Colors.GREEN_900), padding=ft.Padding.all(10), - # text_style=ft.TextStyle( - # size=15, - # italic=True, - # color=ft.Colors.ORANGE, # color is not shown on the button text, - # # use style.color instead - # ), ), ) ) - flet_app.resize_page(400, 600) - - scr_1 = ft.Screenshot( + await flet_app.assert_control_screenshot( + request.node.name, ft.IconButton(icon=ft.Icons.UMBRELLA), ) - flet_app.page.add(scr_1) - # flet_app.page.update() - await flet_app.tester.pump_and_settle() - - flet_app.assert_screenshot( - "theme_1", - await scr_1.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), - ) diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_list_tile_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_list_tile_theme.py index 9ead4c2ee7..9aabfea7f8 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_list_tile_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_list_tile_theme.py @@ -12,7 +12,9 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_theme(flet_app: ftt.FletTestApp, request): +async def test_theme_1(flet_app: ftt.FletTestApp, request): + flet_app.page.enable_screenshots = True + flet_app.resize_page(400, 600) flet_app.page.theme = ft.Theme( list_tile_theme=ft.ListTileTheme( icon_color=ft.Colors.PURPLE, @@ -50,9 +52,6 @@ async def test_theme(flet_app: ftt.FletTestApp, request): ) ) - flet_app.page.enable_screenshots = True - flet_app.resize_page(400, 600) - tile_1 = ft.ListTile( "ListTile with is_three_line = False", subtitle="List", @@ -91,7 +90,7 @@ async def test_theme(flet_app: ftt.FletTestApp, request): await flet_app.tester.pump_and_settle() flet_app.assert_screenshot( - "theme1", + request.node.name, await flet_app.page.take_screenshot( pixel_ratio=flet_app.screenshots_pixel_ratio ), diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_outlined_button_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_outlined_button_theme.py index 0dba880cfc..2182ba09e4 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_outlined_button_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_outlined_button_theme.py @@ -12,7 +12,8 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_outlined_button_theme(flet_app: ftt.FletTestApp): +async def test_theme_1(flet_app: ftt.FletTestApp, request): + flet_app.resize_page(400, 600) flet_app.page.theme = ft.Theme( outlined_button_theme=ft.OutlinedButtonTheme( style=ft.ButtonStyle( @@ -22,25 +23,11 @@ async def test_outlined_button_theme(flet_app: ftt.FletTestApp): ), side=ft.BorderSide(width=5, color=ft.Colors.GREEN_900), padding=ft.Padding.all(10), - # text_style=ft.TextStyle( - # size=15, - # italic=True, - # color=ft.Colors.ORANGE, - # ), ), ) ) - flet_app.resize_page(400, 600) - - scr_1 = ft.Screenshot( + await flet_app.assert_control_screenshot( + request.node.name, ft.OutlinedButton(content="Button"), ) - flet_app.page.add(scr_1) - # flet_app.page.update() - await flet_app.tester.pump_and_settle() - - flet_app.assert_screenshot( - "theme_1", - await scr_1.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), - ) diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/test_text_button_theme.py b/sdk/python/packages/flet/integration_tests/controls/theme/test_text_button_theme.py index 5153185835..26bbbf0d45 100644 --- a/sdk/python/packages/flet/integration_tests/controls/theme/test_text_button_theme.py +++ b/sdk/python/packages/flet/integration_tests/controls/theme/test_text_button_theme.py @@ -12,7 +12,8 @@ def flet_app(flet_app_function): @pytest.mark.asyncio(loop_scope="function") -async def test_text_button_theme(flet_app: ftt.FletTestApp): +async def test_theme_1(flet_app: ftt.FletTestApp, request): + flet_app.resize_page(400, 600) flet_app.page.theme = ft.Theme( text_button_theme=ft.TextButtonTheme( style=ft.ButtonStyle( @@ -22,26 +23,11 @@ async def test_text_button_theme(flet_app: ftt.FletTestApp): ), side=ft.BorderSide(width=5, color=ft.Colors.GREEN_900), padding=ft.Padding.all(10), - # text_style=ft.TextStyle( - # size=15, - # italic=True, - # color=ft.Colors.ORANGE, # color is not shown on the button text, - # # use style.color instead - # ), ), ) ) - flet_app.resize_page(400, 600) - - scr_1 = ft.Screenshot( + await flet_app.assert_control_screenshot( + request.node.name, ft.TextButton(content="Button"), ) - flet_app.page.add(scr_1) - # flet_app.page.update() - await flet_app.tester.pump_and_settle() - - flet_app.assert_screenshot( - "theme_1", - await scr_1.capture(pixel_ratio=flet_app.screenshots_pixel_ratio), - ) From 4af1389245055edc25fa8528f009befe184bbd27 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Sat, 22 Nov 2025 20:26:11 +0100 Subject: [PATCH 5/6] update DateRangePicker test image --- .../macos/date_range_picker_theme/theme_1.png | Bin 65895 -> 51357 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/date_range_picker_theme/theme_1.png b/sdk/python/packages/flet/integration_tests/controls/theme/golden/macos/date_range_picker_theme/theme_1.png index e0d9c72e2f5ae816963c0dea87faebb9fe45ca2e..1d7d12a5b3fe29879dfe482e523a473b6f8b5e5e 100644 GIT binary patch literal 51357 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

iF(9VHme?UK3*8&%^o1UBw73q!VI}9D6Bn{tNV= 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 WM^1h)=m4Ex<9y8RkJ=+4SN{j_V!3kw From ade50c0770167cd7a7785a8d91bd646cc85ae287 Mon Sep 17 00:00:00 2001 From: ndonkoHenri Date: Sat, 22 Nov 2025 23:33:03 +0100 Subject: [PATCH 6/6] replace - in folder names to _ --- packages/flet/lib/src/controls/container.dart | 2 +- .../main.py | 3 ++- .../names.py | 0 .../Dockerfile | 0 .../{controls-gallery => controls_gallery}/LICENSE | 0 .../README.md | 0 .../assets/RobotoMono-VariableFont_wght.ttf | Bin .../assets/RobotoSlab[wght].ttf | Bin .../assets/column.svg | 0 .../assets/datatable.svg | 0 .../assets/github-mark.svg | 0 .../assets/gridview.svg | 0 .../assets/logo.svg | 0 .../assets/page.svg | 0 .../components/controls_grid.py | 0 .../components/examples_view.py | 5 ++--- .../components/gallery_view.py | 3 ++- .../components/left_navigation_menu.py | 0 .../components/properties_table.py | 0 .../01_animatedswitcher_example.py | 0 .../examples/animations/animated_switcher/index.py | 0 .../01_cupertino_action_sheet_example.py | 0 .../buttons/cupertinoactionsheetaction/index.py | 0 .../cupertinobutton/01_cupertino_button_example.py | 0 .../examples/buttons/cupertinobutton/index.py | 0 .../01_cupertino_dialog_action_example.py | 0 .../examples/buttons/cupertinodialogaction/index.py | 0 .../01_cupertino_filled_button_example.py | 0 .../examples/buttons/cupertinofilledbutton/index.py | 0 .../01_cupertino_segmented_button_example.py | 0 .../buttons/cupertinosegmentedbutton/index.py | 0 ...01_cupertino_sliding_segmented_button_example.py | 0 .../cupertinoslidingsegmentedbutton/index.py | 0 .../elevatedbutton/01_basic_elevatedbuttons.py | 0 .../elevatedbutton/02_elevatedbuttons_with_icons.py | 0 .../03_elevatedbutton_with_click_event.py | 0 .../04_elevatedbuttons_with_custom_content.py | 0 .../elevatedbutton/05_elevatedbutton_with_url.py | 0 .../elevatedbutton/06_elevatedbutton_style.py | 0 .../elevatedbutton/07_elevatedbutton_shapes.py | 0 .../examples/buttons/elevatedbutton/index.py | 0 .../filledbutton/01_filledbuttons_example.py | 0 .../examples/buttons/filledbutton/index.py | 0 .../01_filledtonalbuttons_example.py | 0 .../examples/buttons/filledtonalbutton/index.py | 0 .../01_floatingactionbutton_example.py | 0 .../examples/buttons/floatingactionbutton/index.py | 0 .../buttons/iconbutton/01_iconbuttons_example.py | 0 .../iconbutton/02_iconbutton_with_click_event.py | 0 .../examples/buttons/iconbutton/index.py | 0 .../menuitembutton/01_menuitembutton_example.py | 0 .../examples/buttons/menuitembutton/index.py | 0 .../outlinedbutton/01_basic_outlined_buttons.py | 0 .../outlinedbutton/02_outlinedbuttons_with_icons.py | 0 .../03_outlinedbutton_with_click_event.py | 0 .../04_outlinedbuttons_with_custom_content.py | 0 .../examples/buttons/outlinedbutton/index.py | 0 .../popupmenubutton/01_popupmenubutton_example.py | 0 .../examples/buttons/popupmenubutton/index.py | 0 .../segmentedbutton/01_segmentedbutton_example.py | 0 .../examples/buttons/segmentedbutton/index.py | 0 .../submenubutton/01_submenubutton_example.py | 0 .../examples/buttons/submenubutton/index.py | 0 .../buttons/textbutton/01_basic_textbuttons.py | 0 .../buttons/textbutton/02_textbuttons_with_icons.py | 0 .../textbutton/03_textbutton_with_click_event.py | 0 .../04_textbuttons_with_custom_content.py | 0 .../examples/buttons/textbutton/index.py | 0 .../examples/charts/barchart/01_barchart_1.py | 0 .../examples/charts/barchart/02_barchart_2.py | 0 .../examples/charts/barchart/index.py | 0 .../examples/charts/linechart/01_linechart_1.py | 0 .../examples/charts/linechart/02_linechart_2.py | 0 .../examples/charts/linechart/index.py | 0 .../examples/charts/piechart/01_piechart_1.py | 0 .../examples/charts/piechart/02_piechart_2.py | 0 .../examples/charts/piechart/03_piechart_3.py | 0 .../examples/charts/piechart/index.py | 0 .../colors/colorpalettes/01_color_palettes.py | 0 .../examples/colors/colorpalettes/index.py | 0 .../controlcolors/01_change_container_color.py | 0 .../controlcolors/02_change_container_theme.py | 0 .../colors/controlcolors/03_nested_themes.py | 0 .../colors/controlcolors/04_scrollbar_theme.py | 0 .../examples/colors/controlcolors/05_tabs_theme.py | 0 .../examples/colors/controlcolors/index.py | 0 .../colors/cupertinocolors/01_cupertino_colors.py | 0 .../examples/colors/cupertinocolors/index.py | 0 .../examples/colors/themecolors/01_theme_colors.py | 0 .../colors/themecolors/02_customize_theme_colors.py | 0 .../examples/colors/themecolors/index.py | 0 .../contrib/colorpicker/01_color_picker_dialog.py | 0 .../colorpicker/02_color_picker_color_property.py | 0 .../examples/contrib/colorpicker/index.py | 0 .../alertdialog/01_basic_and_modal_dialogs.py | 0 .../examples/dialogs/alertdialog/index.py | 0 .../01_banner_with_leading_icon_and_actions.py | 0 .../examples/dialogs/banner/index.py | 0 .../dialogs/bottomsheet/01_simple_bottomsheet.py | 0 .../examples/dialogs/bottomsheet/index.py | 0 .../01_cupertino_action_sheet_example.py | 0 .../examples/dialogs/cupertinoactionsheet/index.py | 0 .../01_cupertino_alert_dialog_example.py | 0 .../examples/dialogs/cupertinoalertdialog/index.py | 0 .../01_cupertino_bottom_sheet_with_action_sheet.py | 0 ...pertino_bottom_sheet_with_date_picker_example.py | 0 .../03_cupertino_bottom_sheet_picker_example.py | 0 ...4_cupertino_bottom_sheet_timer_picker_example.py | 0 .../examples/dialogs/cupertinobottomsheet/index.py | 0 .../01_cupertino_context_menu_example.py | 0 .../examples/dialogs/cupertinocontextmenu/index.py | 0 .../01_cupertino_date_picker_example.py | 0 .../examples/dialogs/cupertinodatepicker/index.py | 0 .../cupertinopicker/01_cupertino_picker_example.py | 0 .../examples/dialogs/cupertinopicker/index.py | 0 .../01_cupertino_timer_picker_example.py | 0 .../examples/dialogs/cupertinotimerpicker/index.py | 0 .../dialogs/datepicker/01_date_picker_example.py | 0 .../examples/dialogs/datepicker/index.py | 0 .../snackbar/01_snackbar_with_dynamic_message.py | 0 .../examples/dialogs/snackbar/index.py | 0 .../dialogs/timepicker/01_time_picker_example.py | 0 .../examples/dialogs/timepicker/index.py | 0 .../displays/badge/01_badges_in_navigationrail.py | 0 .../examples/displays/badge/index.py | 0 .../displays/canvas/01_canvas_basic_usage.py | 0 .../displays/canvas/02_path_shape_example.py | 0 .../examples/displays/canvas/03_bezier_curve.py | 0 .../examples/displays/canvas/04_drawing_text.py | 0 .../displays/canvas/05_free_hand_drawing_tool.py | 0 .../examples/displays/canvas/index.py | 0 .../circleavatar/01_circleavatar_example.py | 0 .../examples/displays/circleavatar/index.py | 0 .../01_cupertino_activity_indicator_example.py | 0 .../displays/cupertinoactivityindicator/index.py | 0 .../01_icons_with_different_colors_and_sizes.py | 0 .../examples/displays/icon/index.py | 0 .../examples/displays/image/01_images_example.py | 0 .../examples/displays/image/index.py | 0 .../examples/displays/map/01_map_example.py | 0 .../examples/displays/map/index.py | 0 ...with_githubweb_extensions_and_clickable_links.py | 0 .../02_markdown_with_code_syntax_highlight.py | 0 .../examples/displays/markdown/index.py | 0 .../displays/progressbar/01_progressbar_example.py | 0 .../examples/displays/progressbar/index.py | 0 .../progressring/01_progressring_example.py | 0 .../examples/displays/progressring/index.py | 0 .../examples/displays/text/01_custom_text_styles.py | 0 .../text/02_pre_defined_theme_text_styles.py | 0 .../displays/text/03_font_with_variable_weight.py | 0 .../examples/displays/text/05_rich_text_basics.py | 0 .../text/06_rich_text_with_borders_and_stroke.py | 0 .../displays/text/07_rich_text_with_gradient.py | 0 .../examples/displays/text/08_selectable_text.py | 0 ...09_text_with_tooltip_with_a_custom_decoration.py | 0 .../text/10_text_with_variable_properties.py | 3 ++- .../examples/displays/text/index.py | 0 .../input/autocomplete/01_autocomplete_example.py | 0 .../autocomplete/02_autocomplete_properties.py | 0 .../examples/input/autocomplete/index.py | 0 .../input/autofillgroup/01_autofillgroup_example.py | 0 .../examples/input/autofillgroup/index.py | 0 .../examples/input/checkbox/01_basic_checkboxes.py | 0 .../input/checkbox/02_checkbox_with_change_event.py | 0 .../input/checkbox/03_checkbox_properties.py | 0 .../checkbox/04_checkbox_label_style_properties.py | 0 .../examples/input/checkbox/index.py | 0 .../examples/input/chip/01_assist_chips.py | 0 .../examples/input/chip/02_filter_chips.py | 0 .../examples/input/chip/index.py | 0 .../01_cupertinocheckbox_example.py | 0 .../examples/input/cupertinocheckbox/index.py | 0 .../cupertinoradio/01_cupertino_radio_example.py | 0 .../examples/input/cupertinoradio/index.py | 0 .../cupertinoslider/01_cupertino_slider_example.py | 0 .../examples/input/cupertinoslider/index.py | 0 .../cupertinoswitch/01_cupertino_switch_example.py | 0 .../examples/input/cupertinoswitch/index.py | 0 .../01_cupertino_textfield_example.py | 0 .../examples/input/cupertinotextfield/index.py | 0 .../examples/input/dropdown/01_basic_dropdown.py | 0 .../dropdown/02_dropdown_with_label_and_hint.py | 0 .../dropdown/03_add_items_to_dropdown_options.py | 0 .../examples/input/dropdown/index.py | 0 .../examples/input/radio/01_basic_radiogroup.py | 0 .../input/radio/02_radio_group_with_change_event.py | 0 .../examples/input/radio/index.py | 0 .../input/rangeslider/01_rangeslider_example.py | 0 .../examples/input/rangeslider/index.py | 0 .../examples/input/searchbar/01_searchbarexample.py | 0 .../examples/input/searchbar/index.py | 0 .../examples/input/slider/01_basic_sliders.py | 0 .../examples/input/slider/02_sliders_with_values.py | 0 .../input/slider/03_slider_with_change_event.py | 0 .../examples/input/slider/index.py | 0 .../examples/input/switch/01_basic_switches.py | 0 .../examples/input/switch/index.py | 0 .../examples/input/textfield/01_basic_textfields.py | 0 .../textfield/02_textfield_with_change_event.py | 0 .../textfield/03_password_with_reveal_button.py | 0 .../input/textfield/04_multiline_textfields.py | 0 .../05_underlined_and_borderless_textfields.py | 0 .../06_textfields_with_prefixes_and_suffixes.py | 0 .../examples/input/textfield/index.py | 0 .../examples/layout/card/01_card_example.py | 0 .../examples/layout/card/index.py | 0 .../examples/layout/column/01_column_spacing.py | 0 .../examples/layout/column/02_column_wrapping.py | 0 .../layout/column/03_column_vertical_alignment.py | 0 .../layout/column/04_column_horizontal_alignment.py | 0 .../examples/layout/column/05_column_scroll_to.py | 0 .../layout/column/06_infinite_scroll_list.py | 0 .../column/07_scrolling_column_programmatically.py | 0 .../column/08_receiving_scroll_notifications.py | 0 .../examples/layout/column/index.py | 0 .../layout/container/01_clickable_containers.py | 0 .../layout/container/02_container_alignment.py | 0 .../layout/container/03_animate_container.py | 0 .../layout/container/04_container_gradient.py | 0 .../examples/layout/container/index.py | 0 .../01_cupertinolisttile_example.py | 0 .../examples/layout/cupertinolisttile/index.py | 0 .../examples/layout/datatable/01_basic_datatable.py | 0 .../layout/datatable/02_styled_datatable.py | 0 .../examples/layout/datatable/index.py | 0 .../layout/dismissible/01_dismissible_example.py | 0 .../examples/layout/dismissible/index.py | 0 .../examples/layout/divider/01_divider_example.py | 0 .../examples/layout/divider/02_draggable_divider.py | 0 .../examples/layout/divider/index.py | 0 .../01_expansionpanellist_example.py | 0 .../examples/layout/expansionpanellist/index.py | 0 .../expansiontile/01_expansiontile_example.py | 0 .../examples/layout/expansiontile/index.py | 0 .../examples/layout/gridview/01_photo_gallery.py | 0 .../examples/layout/gridview/index.py | 0 .../layout/listtile/01_listtile_examples.py | 0 .../examples/layout/listtile/index.py | 0 .../layout/listview/01_auto_scrolling_listview.py | 0 .../examples/layout/listview/index.py | 0 .../examples/layout/pagelet/01_pagelet_example.py | 0 .../examples/layout/pagelet/index.py | 0 .../layout/placeholder/01_placeholder_example.py | 0 .../examples/layout/placeholder/index.py | 0 .../responsiverow/01_responsiverow_example.py | 0 .../examples/layout/responsiverow/index.py | 0 .../examples/layout/row/01_row_spacing.py | 0 .../examples/layout/row/02_row_wrapping.py | 0 .../layout/row/03_row_horizontal_alignment.py | 0 .../layout/row/04_row_vertical_alignment.py | 0 .../examples/layout/row/index.py | 0 .../examples/layout/safearea/01_safearea_example.py | 0 .../examples/layout/safearea/index.py | 0 .../stack/01_transparent_title_over_an_image.py | 0 .../examples/layout/stack/index.py | 0 .../examples/layout/tabs/01_tabs_example.py | 0 .../examples/layout/tabs/index.py | 0 .../verticaldivider/01_verticaldivider_example.py | 0 .../verticaldivider/02_draggable_verticaldivider.py | 0 .../examples/layout/verticaldivider/index.py | 0 .../examples/navigation/appbar/01_appbar_example.py | 0 .../examples/navigation/appbar/index.py | 0 .../bottomappbar/01_bottomappbar_example.py | 0 .../examples/navigation/bottomappbar/index.py | 0 .../cupertinoappbar/01_cupertino_appbar_example.py | 0 .../examples/navigation/cupertinoappbar/index.py | 0 .../01_navigationbar_example.py | 0 .../navigation/cupertinonavigationbar/index.py | 0 .../navigation/menubar/01_menubar_example.py | 0 .../examples/navigation/menubar/index.py | 0 .../navigationbar/01_navigationbar_example.py | 0 .../examples/navigation/navigationbar/index.py | 0 .../01_navigation_drawer_example.py | 0 .../examples/navigation/navigationdrawer/index.py | 0 .../navigationrail/01_navigationrail_example.py | 0 .../examples/navigation/navigationrail/index.py | 0 .../examples/utility/audio/01_autoplay_audio.py | 0 .../examples/utility/audio/index.py | 0 .../utility/draggable/01_drag_and_drop_colors.py | 0 .../examples/utility/draggable/index.py | 0 .../utility/filepicker/01_pick_multiple_files.py | 0 .../examples/utility/filepicker/index.py | 0 .../gesturedetector/01_draggable_containers.py | 0 .../examples/utility/gesturedetector/index.py | 0 .../01_interactive_viewer_example.py | 0 .../examples/utility/interactiveviewer/index.py | 0 .../01_adding_a_pink_glow_around_image_edges.py | 0 ...2_gradually_fade_out_image_to_the_bottom_edge.py | 0 .../examples/utility/shadermask/index.py | 0 .../examples/utility/video/01_video_example.py | 0 .../examples/utility/video/index.py | 0 .../{controls-gallery => controls_gallery}/fly.toml | 0 .../gallerydata.py | 0 .../{controls-gallery => controls_gallery}/main.py | 0 .../pyproject.toml | 0 .../{counter-flutter => counter_flutter}/Dockerfile | 0 .../assets/favicon.png | Bin .../assets/icon.png | Bin .../assets/manifest.json | 0 .../{counter-flutter => counter_flutter}/fly.toml | 0 .../{counter-flutter => counter_flutter}/main.py | 0 .../requirements.txt | 0 .../assets/icons/loading-animation.png | Bin .../assets/manifest.json | 0 .../main.py | 0 .../page_window.py | 0 .../apps/{flet-animation => flet_animation}/main.py | 0 .../requirements.txt | 0 .../apps/{hello-world => hello_world}/hello.py | 0 .../{hello-world => hello_world}/requirements.txt | 0 .../{icons-browser => icons_browser}/Dockerfile | 0 .../apps/{icons-browser => icons_browser}/README.md | 0 .../apps/{icons-browser => icons_browser}/fly.toml | 0 .../apps/{icons-browser => icons_browser}/main.py | 0 .../requirements.txt | 0 .../main.py | 0 .../requirements.txt | 0 .../building_views_on_route_change.py | 0 .../home_store.py | 0 .../initial_route.py | 0 .../route_change_event.py | 0 .../assets/github-mark.svg | 0 .../audio_player.py | 0 .../{studio-gallery => studio_gallery}/buttons.py | 0 .../calculator.py | 0 .../{studio-gallery => studio_gallery}/charts.py | 0 .../{studio-gallery => studio_gallery}/counter.py | 0 .../drawing_tool.py | 0 .../entry_form.py | 0 .../flet_animation.py | 0 .../apps/{studio-gallery => studio_gallery}/main.py | 8 ++++---- .../{studio-gallery => studio_gallery}/poetry.lock | 0 .../pyproject.toml | 0 .../{studio-gallery => studio_gallery}/to_do.py | 0 sdk/python/examples/publish-gallery.sh | 10 +++++----- 336 files changed, 18 insertions(+), 16 deletions(-) rename sdk/python/examples/apps/{autocomplete-searcher => autocomplete_searcher}/main.py (99%) rename sdk/python/examples/apps/{autocomplete-searcher => autocomplete_searcher}/names.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/Dockerfile (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/LICENSE (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/README.md (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/assets/RobotoMono-VariableFont_wght.ttf (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/assets/RobotoSlab[wght].ttf (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/assets/column.svg (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/assets/datatable.svg (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/assets/github-mark.svg (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/assets/gridview.svg (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/assets/logo.svg (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/assets/page.svg (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/components/controls_grid.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/components/examples_view.py (92%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/components/gallery_view.py (99%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/components/left_navigation_menu.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/components/properties_table.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/animations/animated_switcher/01_animatedswitcher_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/animations/animated_switcher/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinoactionsheetaction/01_cupertino_action_sheet_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinoactionsheetaction/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinobutton/01_cupertino_button_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinobutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinodialogaction/01_cupertino_dialog_action_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinodialogaction/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinofilledbutton/01_cupertino_filled_button_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinofilledbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinosegmentedbutton/01_cupertino_segmented_button_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinosegmentedbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinoslidingsegmentedbutton/01_cupertino_sliding_segmented_button_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/cupertinoslidingsegmentedbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/elevatedbutton/01_basic_elevatedbuttons.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/elevatedbutton/02_elevatedbuttons_with_icons.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/elevatedbutton/03_elevatedbutton_with_click_event.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/elevatedbutton/04_elevatedbuttons_with_custom_content.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/elevatedbutton/05_elevatedbutton_with_url.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/elevatedbutton/06_elevatedbutton_style.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/elevatedbutton/07_elevatedbutton_shapes.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/elevatedbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/filledbutton/01_filledbuttons_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/filledbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/filledtonalbutton/01_filledtonalbuttons_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/filledtonalbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/floatingactionbutton/01_floatingactionbutton_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/floatingactionbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/iconbutton/01_iconbuttons_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/iconbutton/02_iconbutton_with_click_event.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/iconbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/menuitembutton/01_menuitembutton_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/menuitembutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/outlinedbutton/01_basic_outlined_buttons.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/outlinedbutton/02_outlinedbuttons_with_icons.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/outlinedbutton/03_outlinedbutton_with_click_event.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/outlinedbutton/04_outlinedbuttons_with_custom_content.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/outlinedbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/popupmenubutton/01_popupmenubutton_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/popupmenubutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/segmentedbutton/01_segmentedbutton_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/segmentedbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/submenubutton/01_submenubutton_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/submenubutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/textbutton/01_basic_textbuttons.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/textbutton/02_textbuttons_with_icons.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/textbutton/03_textbutton_with_click_event.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/textbutton/04_textbuttons_with_custom_content.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/buttons/textbutton/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/charts/barchart/01_barchart_1.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/charts/barchart/02_barchart_2.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/charts/barchart/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/charts/linechart/01_linechart_1.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/charts/linechart/02_linechart_2.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/charts/linechart/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/charts/piechart/01_piechart_1.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/charts/piechart/02_piechart_2.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/charts/piechart/03_piechart_3.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/charts/piechart/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/colorpalettes/01_color_palettes.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/colorpalettes/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/controlcolors/01_change_container_color.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/controlcolors/02_change_container_theme.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/controlcolors/03_nested_themes.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/controlcolors/04_scrollbar_theme.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/controlcolors/05_tabs_theme.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/controlcolors/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/cupertinocolors/01_cupertino_colors.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/cupertinocolors/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/themecolors/01_theme_colors.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/themecolors/02_customize_theme_colors.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/colors/themecolors/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/contrib/colorpicker/01_color_picker_dialog.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/contrib/colorpicker/02_color_picker_color_property.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/contrib/colorpicker/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/alertdialog/01_basic_and_modal_dialogs.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/alertdialog/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/banner/01_banner_with_leading_icon_and_actions.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/banner/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/bottomsheet/01_simple_bottomsheet.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/bottomsheet/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinoactionsheet/01_cupertino_action_sheet_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinoactionsheet/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinoalertdialog/01_cupertino_alert_dialog_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinoalertdialog/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinobottomsheet/01_cupertino_bottom_sheet_with_action_sheet.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinobottomsheet/02_cupertino_bottom_sheet_with_date_picker_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinobottomsheet/03_cupertino_bottom_sheet_picker_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinobottomsheet/04_cupertino_bottom_sheet_timer_picker_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinobottomsheet/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinocontextmenu/01_cupertino_context_menu_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinocontextmenu/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinodatepicker/01_cupertino_date_picker_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinodatepicker/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinopicker/01_cupertino_picker_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinopicker/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinotimerpicker/01_cupertino_timer_picker_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/cupertinotimerpicker/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/datepicker/01_date_picker_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/datepicker/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/snackbar/01_snackbar_with_dynamic_message.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/snackbar/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/timepicker/01_time_picker_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/dialogs/timepicker/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/badge/01_badges_in_navigationrail.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/badge/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/canvas/01_canvas_basic_usage.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/canvas/02_path_shape_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/canvas/03_bezier_curve.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/canvas/04_drawing_text.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/canvas/05_free_hand_drawing_tool.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/canvas/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/circleavatar/01_circleavatar_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/circleavatar/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/cupertinoactivityindicator/01_cupertino_activity_indicator_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/cupertinoactivityindicator/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/icon/01_icons_with_different_colors_and_sizes.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/icon/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/image/01_images_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/image/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/map/01_map_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/map/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/markdown/01_markdown_with_githubweb_extensions_and_clickable_links.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/markdown/02_markdown_with_code_syntax_highlight.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/markdown/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/progressbar/01_progressbar_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/progressbar/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/progressring/01_progressring_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/progressring/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/text/01_custom_text_styles.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/text/02_pre_defined_theme_text_styles.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/text/03_font_with_variable_weight.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/text/05_rich_text_basics.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/text/06_rich_text_with_borders_and_stroke.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/text/07_rich_text_with_gradient.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/text/08_selectable_text.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/text/09_text_with_tooltip_with_a_custom_decoration.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/text/10_text_with_variable_properties.py (99%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/displays/text/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/autocomplete/01_autocomplete_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/autocomplete/02_autocomplete_properties.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/autocomplete/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/autofillgroup/01_autofillgroup_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/autofillgroup/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/checkbox/01_basic_checkboxes.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/checkbox/02_checkbox_with_change_event.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/checkbox/03_checkbox_properties.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/checkbox/04_checkbox_label_style_properties.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/checkbox/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/chip/01_assist_chips.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/chip/02_filter_chips.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/chip/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/cupertinocheckbox/01_cupertinocheckbox_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/cupertinocheckbox/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/cupertinoradio/01_cupertino_radio_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/cupertinoradio/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/cupertinoslider/01_cupertino_slider_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/cupertinoslider/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/cupertinoswitch/01_cupertino_switch_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/cupertinoswitch/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/cupertinotextfield/01_cupertino_textfield_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/cupertinotextfield/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/dropdown/01_basic_dropdown.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/dropdown/02_dropdown_with_label_and_hint.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/dropdown/03_add_items_to_dropdown_options.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/dropdown/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/radio/01_basic_radiogroup.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/radio/02_radio_group_with_change_event.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/radio/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/rangeslider/01_rangeslider_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/rangeslider/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/searchbar/01_searchbarexample.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/searchbar/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/slider/01_basic_sliders.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/slider/02_sliders_with_values.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/slider/03_slider_with_change_event.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/slider/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/switch/01_basic_switches.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/switch/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/textfield/01_basic_textfields.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/textfield/02_textfield_with_change_event.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/textfield/03_password_with_reveal_button.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/textfield/04_multiline_textfields.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/textfield/05_underlined_and_borderless_textfields.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/textfield/06_textfields_with_prefixes_and_suffixes.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/input/textfield/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/card/01_card_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/card/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/column/01_column_spacing.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/column/02_column_wrapping.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/column/03_column_vertical_alignment.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/column/04_column_horizontal_alignment.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/column/05_column_scroll_to.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/column/06_infinite_scroll_list.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/column/07_scrolling_column_programmatically.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/column/08_receiving_scroll_notifications.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/column/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/container/01_clickable_containers.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/container/02_container_alignment.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/container/03_animate_container.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/container/04_container_gradient.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/container/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/cupertinolisttile/01_cupertinolisttile_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/cupertinolisttile/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/datatable/01_basic_datatable.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/datatable/02_styled_datatable.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/datatable/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/dismissible/01_dismissible_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/dismissible/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/divider/01_divider_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/divider/02_draggable_divider.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/divider/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/expansionpanellist/01_expansionpanellist_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/expansionpanellist/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/expansiontile/01_expansiontile_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/expansiontile/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/gridview/01_photo_gallery.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/gridview/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/listtile/01_listtile_examples.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/listtile/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/listview/01_auto_scrolling_listview.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/listview/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/pagelet/01_pagelet_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/pagelet/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/placeholder/01_placeholder_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/placeholder/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/responsiverow/01_responsiverow_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/responsiverow/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/row/01_row_spacing.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/row/02_row_wrapping.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/row/03_row_horizontal_alignment.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/row/04_row_vertical_alignment.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/row/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/safearea/01_safearea_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/safearea/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/stack/01_transparent_title_over_an_image.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/stack/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/tabs/01_tabs_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/tabs/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/verticaldivider/01_verticaldivider_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/verticaldivider/02_draggable_verticaldivider.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/layout/verticaldivider/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/appbar/01_appbar_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/appbar/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/bottomappbar/01_bottomappbar_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/bottomappbar/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/cupertinoappbar/01_cupertino_appbar_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/cupertinoappbar/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/cupertinonavigationbar/01_navigationbar_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/cupertinonavigationbar/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/menubar/01_menubar_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/menubar/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/navigationbar/01_navigationbar_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/navigationbar/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/navigationdrawer/01_navigation_drawer_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/navigationdrawer/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/navigationrail/01_navigationrail_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/navigation/navigationrail/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/audio/01_autoplay_audio.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/audio/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/draggable/01_drag_and_drop_colors.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/draggable/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/filepicker/01_pick_multiple_files.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/filepicker/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/gesturedetector/01_draggable_containers.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/gesturedetector/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/interactiveviewer/01_interactive_viewer_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/interactiveviewer/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/shadermask/01_adding_a_pink_glow_around_image_edges.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/shadermask/02_gradually_fade_out_image_to_the_bottom_edge.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/shadermask/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/video/01_video_example.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/examples/utility/video/index.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/fly.toml (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/gallerydata.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/main.py (100%) rename sdk/python/examples/apps/{controls-gallery => controls_gallery}/pyproject.toml (100%) rename sdk/python/examples/apps/{counter-flutter => counter_flutter}/Dockerfile (100%) rename sdk/python/examples/apps/{counter-flutter => counter_flutter}/assets/favicon.png (100%) rename sdk/python/examples/apps/{counter-flutter => counter_flutter}/assets/icon.png (100%) rename sdk/python/examples/apps/{counter-flutter => counter_flutter}/assets/manifest.json (100%) rename sdk/python/examples/apps/{counter-flutter => counter_flutter}/fly.toml (100%) rename sdk/python/examples/apps/{counter-flutter => counter_flutter}/main.py (100%) rename sdk/python/examples/apps/{counter-flutter => counter_flutter}/requirements.txt (100%) rename sdk/python/examples/apps/{custom-loading-image => custom_loading_image}/assets/icons/loading-animation.png (100%) rename sdk/python/examples/apps/{custom-loading-image => custom_loading_image}/assets/manifest.json (100%) rename sdk/python/examples/apps/{custom-loading-image => custom_loading_image}/main.py (100%) rename sdk/python/examples/apps/{desktop-window-manager => desktop_window_manager}/page_window.py (100%) rename sdk/python/examples/apps/{flet-animation => flet_animation}/main.py (100%) rename sdk/python/examples/apps/{flet-animation => flet_animation}/requirements.txt (100%) rename sdk/python/examples/apps/{hello-world => hello_world}/hello.py (100%) rename sdk/python/examples/apps/{hello-world => hello_world}/requirements.txt (100%) rename sdk/python/examples/apps/{icons-browser => icons_browser}/Dockerfile (100%) rename sdk/python/examples/apps/{icons-browser => icons_browser}/README.md (100%) rename sdk/python/examples/apps/{icons-browser => icons_browser}/fly.toml (100%) rename sdk/python/examples/apps/{icons-browser => icons_browser}/main.py (100%) rename sdk/python/examples/apps/{icons-browser => icons_browser}/requirements.txt (100%) rename sdk/python/examples/apps/{icons-cupertino-browser => icons_cupertino_browser}/main.py (100%) rename sdk/python/examples/apps/{icons-cupertino-browser => icons_cupertino_browser}/requirements.txt (100%) rename sdk/python/examples/apps/{routing-navigation => routing_navigation}/building_views_on_route_change.py (100%) rename sdk/python/examples/apps/{routing-navigation => routing_navigation}/home_store.py (100%) rename sdk/python/examples/apps/{routing-navigation => routing_navigation}/initial_route.py (100%) rename sdk/python/examples/apps/{routing-navigation => routing_navigation}/route_change_event.py (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/assets/github-mark.svg (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/audio_player.py (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/buttons.py (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/calculator.py (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/charts.py (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/counter.py (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/drawing_tool.py (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/entry_form.py (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/flet_animation.py (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/main.py (95%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/poetry.lock (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/pyproject.toml (100%) rename sdk/python/examples/apps/{studio-gallery => studio_gallery}/to_do.py (100%) diff --git a/packages/flet/lib/src/controls/container.dart b/packages/flet/lib/src/controls/container.dart index 124564cfea..1684977e49 100644 --- a/packages/flet/lib/src/controls/container.dart +++ b/packages/flet/lib/src/controls/container.dart @@ -50,7 +50,7 @@ class ContainerControl extends StatelessWidget with FletStoreMixin { Widget? container; var onAnimationEnd = control.getBool("on_animation_end", false)! - ? () => control.triggerEvent("animation_end" "container") + ? () => control.triggerEvent("animation_end", "container") : null; if ((onClick || url != null || onLongPress || onHover || onTapDown) && ink && diff --git a/sdk/python/examples/apps/autocomplete-searcher/main.py b/sdk/python/examples/apps/autocomplete_searcher/main.py similarity index 99% rename from sdk/python/examples/apps/autocomplete-searcher/main.py rename to sdk/python/examples/apps/autocomplete_searcher/main.py index 42c91e4d99..e34bc5aac5 100644 --- a/sdk/python/examples/apps/autocomplete-searcher/main.py +++ b/sdk/python/examples/apps/autocomplete_searcher/main.py @@ -1,6 +1,7 @@ -import flet as ft from names import NAMES +import flet as ft + def printer(e): print("Yellow!") diff --git a/sdk/python/examples/apps/autocomplete-searcher/names.py b/sdk/python/examples/apps/autocomplete_searcher/names.py similarity index 100% rename from sdk/python/examples/apps/autocomplete-searcher/names.py rename to sdk/python/examples/apps/autocomplete_searcher/names.py diff --git a/sdk/python/examples/apps/controls-gallery/Dockerfile b/sdk/python/examples/apps/controls_gallery/Dockerfile similarity index 100% rename from sdk/python/examples/apps/controls-gallery/Dockerfile rename to sdk/python/examples/apps/controls_gallery/Dockerfile diff --git a/sdk/python/examples/apps/controls-gallery/LICENSE b/sdk/python/examples/apps/controls_gallery/LICENSE similarity index 100% rename from sdk/python/examples/apps/controls-gallery/LICENSE rename to sdk/python/examples/apps/controls_gallery/LICENSE diff --git a/sdk/python/examples/apps/controls-gallery/README.md b/sdk/python/examples/apps/controls_gallery/README.md similarity index 100% rename from sdk/python/examples/apps/controls-gallery/README.md rename to sdk/python/examples/apps/controls_gallery/README.md diff --git a/sdk/python/examples/apps/controls-gallery/assets/RobotoMono-VariableFont_wght.ttf b/sdk/python/examples/apps/controls_gallery/assets/RobotoMono-VariableFont_wght.ttf similarity index 100% rename from sdk/python/examples/apps/controls-gallery/assets/RobotoMono-VariableFont_wght.ttf rename to sdk/python/examples/apps/controls_gallery/assets/RobotoMono-VariableFont_wght.ttf diff --git a/sdk/python/examples/apps/controls-gallery/assets/RobotoSlab[wght].ttf b/sdk/python/examples/apps/controls_gallery/assets/RobotoSlab[wght].ttf similarity index 100% rename from sdk/python/examples/apps/controls-gallery/assets/RobotoSlab[wght].ttf rename to sdk/python/examples/apps/controls_gallery/assets/RobotoSlab[wght].ttf diff --git a/sdk/python/examples/apps/controls-gallery/assets/column.svg b/sdk/python/examples/apps/controls_gallery/assets/column.svg similarity index 100% rename from sdk/python/examples/apps/controls-gallery/assets/column.svg rename to sdk/python/examples/apps/controls_gallery/assets/column.svg diff --git a/sdk/python/examples/apps/controls-gallery/assets/datatable.svg b/sdk/python/examples/apps/controls_gallery/assets/datatable.svg similarity index 100% rename from sdk/python/examples/apps/controls-gallery/assets/datatable.svg rename to sdk/python/examples/apps/controls_gallery/assets/datatable.svg diff --git a/sdk/python/examples/apps/controls-gallery/assets/github-mark.svg b/sdk/python/examples/apps/controls_gallery/assets/github-mark.svg similarity index 100% rename from sdk/python/examples/apps/controls-gallery/assets/github-mark.svg rename to sdk/python/examples/apps/controls_gallery/assets/github-mark.svg diff --git a/sdk/python/examples/apps/controls-gallery/assets/gridview.svg b/sdk/python/examples/apps/controls_gallery/assets/gridview.svg similarity index 100% rename from sdk/python/examples/apps/controls-gallery/assets/gridview.svg rename to sdk/python/examples/apps/controls_gallery/assets/gridview.svg diff --git a/sdk/python/examples/apps/controls-gallery/assets/logo.svg b/sdk/python/examples/apps/controls_gallery/assets/logo.svg similarity index 100% rename from sdk/python/examples/apps/controls-gallery/assets/logo.svg rename to sdk/python/examples/apps/controls_gallery/assets/logo.svg diff --git a/sdk/python/examples/apps/controls-gallery/assets/page.svg b/sdk/python/examples/apps/controls_gallery/assets/page.svg similarity index 100% rename from sdk/python/examples/apps/controls-gallery/assets/page.svg rename to sdk/python/examples/apps/controls_gallery/assets/page.svg diff --git a/sdk/python/examples/apps/controls-gallery/components/controls_grid.py b/sdk/python/examples/apps/controls_gallery/components/controls_grid.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/components/controls_grid.py rename to sdk/python/examples/apps/controls_gallery/components/controls_grid.py diff --git a/sdk/python/examples/apps/controls-gallery/components/examples_view.py b/sdk/python/examples/apps/controls_gallery/components/examples_view.py similarity index 92% rename from sdk/python/examples/apps/controls-gallery/components/examples_view.py rename to sdk/python/examples/apps/controls_gallery/components/examples_view.py index a42b0f79f9..c8296d8b0a 100644 --- a/sdk/python/examples/apps/controls-gallery/components/examples_view.py +++ b/sdk/python/examples/apps/controls_gallery/components/examples_view.py @@ -36,14 +36,13 @@ def display(self, grid_item): weight=ft.FontWeight.W_500, ), ft.IconButton( - content=ft.Image( + icon=ft.Image( src="github-mark.svg", width=24, height=24, color=ft.Colors.ON_SURFACE_VARIANT, ), - url=f"https://github.com/flet-dev/examples/blob/main/python/apps/controls-gallery/examples/{example.file_name}", - url_target=ft.UrlTarget.BLANK, + url=f"https://github.com/flet-dev/examples/blob/main/python/apps/controls_gallery/examples/{example.file_name}", ), ], ), diff --git a/sdk/python/examples/apps/controls-gallery/components/gallery_view.py b/sdk/python/examples/apps/controls_gallery/components/gallery_view.py similarity index 99% rename from sdk/python/examples/apps/controls-gallery/components/gallery_view.py rename to sdk/python/examples/apps/controls_gallery/components/gallery_view.py index 1e7d02603b..d803d7cd8a 100644 --- a/sdk/python/examples/apps/controls-gallery/components/gallery_view.py +++ b/sdk/python/examples/apps/controls_gallery/components/gallery_view.py @@ -1,8 +1,9 @@ -import flet as ft from components.controls_grid import ControlsGrid from components.examples_view import ExamplesView from components.left_navigation_menu import LeftNavigationMenu +import flet as ft + class GalleryView(ft.Row): def __init__(self, gallery): diff --git a/sdk/python/examples/apps/controls-gallery/components/left_navigation_menu.py b/sdk/python/examples/apps/controls_gallery/components/left_navigation_menu.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/components/left_navigation_menu.py rename to sdk/python/examples/apps/controls_gallery/components/left_navigation_menu.py diff --git a/sdk/python/examples/apps/controls-gallery/components/properties_table.py b/sdk/python/examples/apps/controls_gallery/components/properties_table.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/components/properties_table.py rename to sdk/python/examples/apps/controls_gallery/components/properties_table.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/animations/animated_switcher/01_animatedswitcher_example.py b/sdk/python/examples/apps/controls_gallery/examples/animations/animated_switcher/01_animatedswitcher_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/animations/animated_switcher/01_animatedswitcher_example.py rename to sdk/python/examples/apps/controls_gallery/examples/animations/animated_switcher/01_animatedswitcher_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/animations/animated_switcher/index.py b/sdk/python/examples/apps/controls_gallery/examples/animations/animated_switcher/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/animations/animated_switcher/index.py rename to sdk/python/examples/apps/controls_gallery/examples/animations/animated_switcher/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinoactionsheetaction/01_cupertino_action_sheet_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinoactionsheetaction/01_cupertino_action_sheet_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinoactionsheetaction/01_cupertino_action_sheet_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinoactionsheetaction/01_cupertino_action_sheet_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinoactionsheetaction/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinoactionsheetaction/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinoactionsheetaction/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinoactionsheetaction/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinobutton/01_cupertino_button_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinobutton/01_cupertino_button_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinobutton/01_cupertino_button_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinobutton/01_cupertino_button_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinobutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinobutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinobutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinobutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinodialogaction/01_cupertino_dialog_action_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinodialogaction/01_cupertino_dialog_action_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinodialogaction/01_cupertino_dialog_action_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinodialogaction/01_cupertino_dialog_action_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinodialogaction/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinodialogaction/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinodialogaction/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinodialogaction/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinofilledbutton/01_cupertino_filled_button_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinofilledbutton/01_cupertino_filled_button_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinofilledbutton/01_cupertino_filled_button_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinofilledbutton/01_cupertino_filled_button_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinofilledbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinofilledbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinofilledbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinofilledbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinosegmentedbutton/01_cupertino_segmented_button_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinosegmentedbutton/01_cupertino_segmented_button_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinosegmentedbutton/01_cupertino_segmented_button_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinosegmentedbutton/01_cupertino_segmented_button_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinosegmentedbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinosegmentedbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinosegmentedbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinosegmentedbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinoslidingsegmentedbutton/01_cupertino_sliding_segmented_button_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinoslidingsegmentedbutton/01_cupertino_sliding_segmented_button_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinoslidingsegmentedbutton/01_cupertino_sliding_segmented_button_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinoslidingsegmentedbutton/01_cupertino_sliding_segmented_button_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinoslidingsegmentedbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinoslidingsegmentedbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/cupertinoslidingsegmentedbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/cupertinoslidingsegmentedbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/01_basic_elevatedbuttons.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/01_basic_elevatedbuttons.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/01_basic_elevatedbuttons.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/01_basic_elevatedbuttons.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/02_elevatedbuttons_with_icons.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/02_elevatedbuttons_with_icons.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/02_elevatedbuttons_with_icons.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/02_elevatedbuttons_with_icons.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/03_elevatedbutton_with_click_event.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/03_elevatedbutton_with_click_event.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/03_elevatedbutton_with_click_event.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/03_elevatedbutton_with_click_event.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/04_elevatedbuttons_with_custom_content.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/04_elevatedbuttons_with_custom_content.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/04_elevatedbuttons_with_custom_content.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/04_elevatedbuttons_with_custom_content.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/05_elevatedbutton_with_url.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/05_elevatedbutton_with_url.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/05_elevatedbutton_with_url.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/05_elevatedbutton_with_url.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/06_elevatedbutton_style.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/06_elevatedbutton_style.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/06_elevatedbutton_style.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/06_elevatedbutton_style.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/07_elevatedbutton_shapes.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/07_elevatedbutton_shapes.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/07_elevatedbutton_shapes.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/07_elevatedbutton_shapes.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/elevatedbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/elevatedbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/filledbutton/01_filledbuttons_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/filledbutton/01_filledbuttons_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/filledbutton/01_filledbuttons_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/filledbutton/01_filledbuttons_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/filledbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/filledbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/filledbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/filledbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/filledtonalbutton/01_filledtonalbuttons_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/filledtonalbutton/01_filledtonalbuttons_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/filledtonalbutton/01_filledtonalbuttons_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/filledtonalbutton/01_filledtonalbuttons_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/filledtonalbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/filledtonalbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/filledtonalbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/filledtonalbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/floatingactionbutton/01_floatingactionbutton_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/floatingactionbutton/01_floatingactionbutton_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/floatingactionbutton/01_floatingactionbutton_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/floatingactionbutton/01_floatingactionbutton_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/floatingactionbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/floatingactionbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/floatingactionbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/floatingactionbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/iconbutton/01_iconbuttons_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/iconbutton/01_iconbuttons_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/iconbutton/01_iconbuttons_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/iconbutton/01_iconbuttons_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/iconbutton/02_iconbutton_with_click_event.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/iconbutton/02_iconbutton_with_click_event.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/iconbutton/02_iconbutton_with_click_event.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/iconbutton/02_iconbutton_with_click_event.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/iconbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/iconbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/iconbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/iconbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/menuitembutton/01_menuitembutton_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/menuitembutton/01_menuitembutton_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/menuitembutton/01_menuitembutton_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/menuitembutton/01_menuitembutton_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/menuitembutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/menuitembutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/menuitembutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/menuitembutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/outlinedbutton/01_basic_outlined_buttons.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/outlinedbutton/01_basic_outlined_buttons.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/outlinedbutton/01_basic_outlined_buttons.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/outlinedbutton/01_basic_outlined_buttons.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/outlinedbutton/02_outlinedbuttons_with_icons.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/outlinedbutton/02_outlinedbuttons_with_icons.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/outlinedbutton/02_outlinedbuttons_with_icons.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/outlinedbutton/02_outlinedbuttons_with_icons.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/outlinedbutton/03_outlinedbutton_with_click_event.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/outlinedbutton/03_outlinedbutton_with_click_event.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/outlinedbutton/03_outlinedbutton_with_click_event.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/outlinedbutton/03_outlinedbutton_with_click_event.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/outlinedbutton/04_outlinedbuttons_with_custom_content.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/outlinedbutton/04_outlinedbuttons_with_custom_content.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/outlinedbutton/04_outlinedbuttons_with_custom_content.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/outlinedbutton/04_outlinedbuttons_with_custom_content.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/outlinedbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/outlinedbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/outlinedbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/outlinedbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/popupmenubutton/01_popupmenubutton_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/popupmenubutton/01_popupmenubutton_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/popupmenubutton/01_popupmenubutton_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/popupmenubutton/01_popupmenubutton_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/popupmenubutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/popupmenubutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/popupmenubutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/popupmenubutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/segmentedbutton/01_segmentedbutton_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/segmentedbutton/01_segmentedbutton_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/segmentedbutton/01_segmentedbutton_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/segmentedbutton/01_segmentedbutton_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/segmentedbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/segmentedbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/segmentedbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/segmentedbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/submenubutton/01_submenubutton_example.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/submenubutton/01_submenubutton_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/submenubutton/01_submenubutton_example.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/submenubutton/01_submenubutton_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/submenubutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/submenubutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/submenubutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/submenubutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/textbutton/01_basic_textbuttons.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/textbutton/01_basic_textbuttons.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/textbutton/01_basic_textbuttons.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/textbutton/01_basic_textbuttons.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/textbutton/02_textbuttons_with_icons.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/textbutton/02_textbuttons_with_icons.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/textbutton/02_textbuttons_with_icons.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/textbutton/02_textbuttons_with_icons.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/textbutton/03_textbutton_with_click_event.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/textbutton/03_textbutton_with_click_event.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/textbutton/03_textbutton_with_click_event.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/textbutton/03_textbutton_with_click_event.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/textbutton/04_textbuttons_with_custom_content.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/textbutton/04_textbuttons_with_custom_content.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/textbutton/04_textbuttons_with_custom_content.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/textbutton/04_textbuttons_with_custom_content.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/buttons/textbutton/index.py b/sdk/python/examples/apps/controls_gallery/examples/buttons/textbutton/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/buttons/textbutton/index.py rename to sdk/python/examples/apps/controls_gallery/examples/buttons/textbutton/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/charts/barchart/01_barchart_1.py b/sdk/python/examples/apps/controls_gallery/examples/charts/barchart/01_barchart_1.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/charts/barchart/01_barchart_1.py rename to sdk/python/examples/apps/controls_gallery/examples/charts/barchart/01_barchart_1.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/charts/barchart/02_barchart_2.py b/sdk/python/examples/apps/controls_gallery/examples/charts/barchart/02_barchart_2.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/charts/barchart/02_barchart_2.py rename to sdk/python/examples/apps/controls_gallery/examples/charts/barchart/02_barchart_2.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/charts/barchart/index.py b/sdk/python/examples/apps/controls_gallery/examples/charts/barchart/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/charts/barchart/index.py rename to sdk/python/examples/apps/controls_gallery/examples/charts/barchart/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/charts/linechart/01_linechart_1.py b/sdk/python/examples/apps/controls_gallery/examples/charts/linechart/01_linechart_1.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/charts/linechart/01_linechart_1.py rename to sdk/python/examples/apps/controls_gallery/examples/charts/linechart/01_linechart_1.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/charts/linechart/02_linechart_2.py b/sdk/python/examples/apps/controls_gallery/examples/charts/linechart/02_linechart_2.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/charts/linechart/02_linechart_2.py rename to sdk/python/examples/apps/controls_gallery/examples/charts/linechart/02_linechart_2.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/charts/linechart/index.py b/sdk/python/examples/apps/controls_gallery/examples/charts/linechart/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/charts/linechart/index.py rename to sdk/python/examples/apps/controls_gallery/examples/charts/linechart/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/charts/piechart/01_piechart_1.py b/sdk/python/examples/apps/controls_gallery/examples/charts/piechart/01_piechart_1.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/charts/piechart/01_piechart_1.py rename to sdk/python/examples/apps/controls_gallery/examples/charts/piechart/01_piechart_1.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/charts/piechart/02_piechart_2.py b/sdk/python/examples/apps/controls_gallery/examples/charts/piechart/02_piechart_2.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/charts/piechart/02_piechart_2.py rename to sdk/python/examples/apps/controls_gallery/examples/charts/piechart/02_piechart_2.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/charts/piechart/03_piechart_3.py b/sdk/python/examples/apps/controls_gallery/examples/charts/piechart/03_piechart_3.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/charts/piechart/03_piechart_3.py rename to sdk/python/examples/apps/controls_gallery/examples/charts/piechart/03_piechart_3.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/charts/piechart/index.py b/sdk/python/examples/apps/controls_gallery/examples/charts/piechart/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/charts/piechart/index.py rename to sdk/python/examples/apps/controls_gallery/examples/charts/piechart/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/colorpalettes/01_color_palettes.py b/sdk/python/examples/apps/controls_gallery/examples/colors/colorpalettes/01_color_palettes.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/colorpalettes/01_color_palettes.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/colorpalettes/01_color_palettes.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/colorpalettes/index.py b/sdk/python/examples/apps/controls_gallery/examples/colors/colorpalettes/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/colorpalettes/index.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/colorpalettes/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/01_change_container_color.py b/sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/01_change_container_color.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/01_change_container_color.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/01_change_container_color.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/02_change_container_theme.py b/sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/02_change_container_theme.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/02_change_container_theme.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/02_change_container_theme.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/03_nested_themes.py b/sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/03_nested_themes.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/03_nested_themes.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/03_nested_themes.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/04_scrollbar_theme.py b/sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/04_scrollbar_theme.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/04_scrollbar_theme.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/04_scrollbar_theme.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/05_tabs_theme.py b/sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/05_tabs_theme.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/05_tabs_theme.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/05_tabs_theme.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/index.py b/sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/controlcolors/index.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/controlcolors/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/cupertinocolors/01_cupertino_colors.py b/sdk/python/examples/apps/controls_gallery/examples/colors/cupertinocolors/01_cupertino_colors.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/cupertinocolors/01_cupertino_colors.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/cupertinocolors/01_cupertino_colors.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/cupertinocolors/index.py b/sdk/python/examples/apps/controls_gallery/examples/colors/cupertinocolors/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/cupertinocolors/index.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/cupertinocolors/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/themecolors/01_theme_colors.py b/sdk/python/examples/apps/controls_gallery/examples/colors/themecolors/01_theme_colors.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/themecolors/01_theme_colors.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/themecolors/01_theme_colors.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/themecolors/02_customize_theme_colors.py b/sdk/python/examples/apps/controls_gallery/examples/colors/themecolors/02_customize_theme_colors.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/themecolors/02_customize_theme_colors.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/themecolors/02_customize_theme_colors.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/colors/themecolors/index.py b/sdk/python/examples/apps/controls_gallery/examples/colors/themecolors/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/colors/themecolors/index.py rename to sdk/python/examples/apps/controls_gallery/examples/colors/themecolors/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/contrib/colorpicker/01_color_picker_dialog.py b/sdk/python/examples/apps/controls_gallery/examples/contrib/colorpicker/01_color_picker_dialog.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/contrib/colorpicker/01_color_picker_dialog.py rename to sdk/python/examples/apps/controls_gallery/examples/contrib/colorpicker/01_color_picker_dialog.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/contrib/colorpicker/02_color_picker_color_property.py b/sdk/python/examples/apps/controls_gallery/examples/contrib/colorpicker/02_color_picker_color_property.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/contrib/colorpicker/02_color_picker_color_property.py rename to sdk/python/examples/apps/controls_gallery/examples/contrib/colorpicker/02_color_picker_color_property.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/contrib/colorpicker/index.py b/sdk/python/examples/apps/controls_gallery/examples/contrib/colorpicker/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/contrib/colorpicker/index.py rename to sdk/python/examples/apps/controls_gallery/examples/contrib/colorpicker/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/alertdialog/01_basic_and_modal_dialogs.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/alertdialog/01_basic_and_modal_dialogs.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/alertdialog/01_basic_and_modal_dialogs.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/alertdialog/01_basic_and_modal_dialogs.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/alertdialog/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/alertdialog/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/alertdialog/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/alertdialog/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/banner/01_banner_with_leading_icon_and_actions.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/banner/01_banner_with_leading_icon_and_actions.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/banner/01_banner_with_leading_icon_and_actions.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/banner/01_banner_with_leading_icon_and_actions.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/banner/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/banner/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/banner/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/banner/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/bottomsheet/01_simple_bottomsheet.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/bottomsheet/01_simple_bottomsheet.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/bottomsheet/01_simple_bottomsheet.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/bottomsheet/01_simple_bottomsheet.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/bottomsheet/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/bottomsheet/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/bottomsheet/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/bottomsheet/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinoactionsheet/01_cupertino_action_sheet_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinoactionsheet/01_cupertino_action_sheet_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinoactionsheet/01_cupertino_action_sheet_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinoactionsheet/01_cupertino_action_sheet_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinoactionsheet/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinoactionsheet/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinoactionsheet/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinoactionsheet/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinoalertdialog/01_cupertino_alert_dialog_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinoalertdialog/01_cupertino_alert_dialog_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinoalertdialog/01_cupertino_alert_dialog_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinoalertdialog/01_cupertino_alert_dialog_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinoalertdialog/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinoalertdialog/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinoalertdialog/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinoalertdialog/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinobottomsheet/01_cupertino_bottom_sheet_with_action_sheet.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinobottomsheet/01_cupertino_bottom_sheet_with_action_sheet.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinobottomsheet/01_cupertino_bottom_sheet_with_action_sheet.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinobottomsheet/01_cupertino_bottom_sheet_with_action_sheet.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinobottomsheet/02_cupertino_bottom_sheet_with_date_picker_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinobottomsheet/02_cupertino_bottom_sheet_with_date_picker_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinobottomsheet/02_cupertino_bottom_sheet_with_date_picker_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinobottomsheet/02_cupertino_bottom_sheet_with_date_picker_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinobottomsheet/03_cupertino_bottom_sheet_picker_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinobottomsheet/03_cupertino_bottom_sheet_picker_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinobottomsheet/03_cupertino_bottom_sheet_picker_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinobottomsheet/03_cupertino_bottom_sheet_picker_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinobottomsheet/04_cupertino_bottom_sheet_timer_picker_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinobottomsheet/04_cupertino_bottom_sheet_timer_picker_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinobottomsheet/04_cupertino_bottom_sheet_timer_picker_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinobottomsheet/04_cupertino_bottom_sheet_timer_picker_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinobottomsheet/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinobottomsheet/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinobottomsheet/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinobottomsheet/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinocontextmenu/01_cupertino_context_menu_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinocontextmenu/01_cupertino_context_menu_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinocontextmenu/01_cupertino_context_menu_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinocontextmenu/01_cupertino_context_menu_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinocontextmenu/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinocontextmenu/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinocontextmenu/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinocontextmenu/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinodatepicker/01_cupertino_date_picker_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinodatepicker/01_cupertino_date_picker_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinodatepicker/01_cupertino_date_picker_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinodatepicker/01_cupertino_date_picker_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinodatepicker/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinodatepicker/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinodatepicker/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinodatepicker/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinopicker/01_cupertino_picker_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinopicker/01_cupertino_picker_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinopicker/01_cupertino_picker_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinopicker/01_cupertino_picker_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinopicker/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinopicker/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinopicker/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinopicker/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinotimerpicker/01_cupertino_timer_picker_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinotimerpicker/01_cupertino_timer_picker_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinotimerpicker/01_cupertino_timer_picker_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinotimerpicker/01_cupertino_timer_picker_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinotimerpicker/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinotimerpicker/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/cupertinotimerpicker/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/cupertinotimerpicker/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/datepicker/01_date_picker_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/datepicker/01_date_picker_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/datepicker/01_date_picker_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/datepicker/01_date_picker_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/datepicker/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/datepicker/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/datepicker/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/datepicker/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/snackbar/01_snackbar_with_dynamic_message.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/snackbar/01_snackbar_with_dynamic_message.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/snackbar/01_snackbar_with_dynamic_message.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/snackbar/01_snackbar_with_dynamic_message.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/snackbar/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/snackbar/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/snackbar/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/snackbar/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/timepicker/01_time_picker_example.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/timepicker/01_time_picker_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/timepicker/01_time_picker_example.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/timepicker/01_time_picker_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/dialogs/timepicker/index.py b/sdk/python/examples/apps/controls_gallery/examples/dialogs/timepicker/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/dialogs/timepicker/index.py rename to sdk/python/examples/apps/controls_gallery/examples/dialogs/timepicker/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/badge/01_badges_in_navigationrail.py b/sdk/python/examples/apps/controls_gallery/examples/displays/badge/01_badges_in_navigationrail.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/badge/01_badges_in_navigationrail.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/badge/01_badges_in_navigationrail.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/badge/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/badge/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/badge/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/badge/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/canvas/01_canvas_basic_usage.py b/sdk/python/examples/apps/controls_gallery/examples/displays/canvas/01_canvas_basic_usage.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/canvas/01_canvas_basic_usage.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/canvas/01_canvas_basic_usage.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/canvas/02_path_shape_example.py b/sdk/python/examples/apps/controls_gallery/examples/displays/canvas/02_path_shape_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/canvas/02_path_shape_example.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/canvas/02_path_shape_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/canvas/03_bezier_curve.py b/sdk/python/examples/apps/controls_gallery/examples/displays/canvas/03_bezier_curve.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/canvas/03_bezier_curve.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/canvas/03_bezier_curve.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/canvas/04_drawing_text.py b/sdk/python/examples/apps/controls_gallery/examples/displays/canvas/04_drawing_text.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/canvas/04_drawing_text.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/canvas/04_drawing_text.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/canvas/05_free_hand_drawing_tool.py b/sdk/python/examples/apps/controls_gallery/examples/displays/canvas/05_free_hand_drawing_tool.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/canvas/05_free_hand_drawing_tool.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/canvas/05_free_hand_drawing_tool.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/canvas/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/canvas/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/canvas/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/canvas/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/circleavatar/01_circleavatar_example.py b/sdk/python/examples/apps/controls_gallery/examples/displays/circleavatar/01_circleavatar_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/circleavatar/01_circleavatar_example.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/circleavatar/01_circleavatar_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/circleavatar/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/circleavatar/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/circleavatar/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/circleavatar/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/cupertinoactivityindicator/01_cupertino_activity_indicator_example.py b/sdk/python/examples/apps/controls_gallery/examples/displays/cupertinoactivityindicator/01_cupertino_activity_indicator_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/cupertinoactivityindicator/01_cupertino_activity_indicator_example.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/cupertinoactivityindicator/01_cupertino_activity_indicator_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/cupertinoactivityindicator/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/cupertinoactivityindicator/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/cupertinoactivityindicator/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/cupertinoactivityindicator/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/icon/01_icons_with_different_colors_and_sizes.py b/sdk/python/examples/apps/controls_gallery/examples/displays/icon/01_icons_with_different_colors_and_sizes.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/icon/01_icons_with_different_colors_and_sizes.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/icon/01_icons_with_different_colors_and_sizes.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/icon/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/icon/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/icon/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/icon/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/image/01_images_example.py b/sdk/python/examples/apps/controls_gallery/examples/displays/image/01_images_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/image/01_images_example.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/image/01_images_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/image/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/image/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/image/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/image/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/map/01_map_example.py b/sdk/python/examples/apps/controls_gallery/examples/displays/map/01_map_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/map/01_map_example.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/map/01_map_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/map/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/map/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/map/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/map/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/markdown/01_markdown_with_githubweb_extensions_and_clickable_links.py b/sdk/python/examples/apps/controls_gallery/examples/displays/markdown/01_markdown_with_githubweb_extensions_and_clickable_links.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/markdown/01_markdown_with_githubweb_extensions_and_clickable_links.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/markdown/01_markdown_with_githubweb_extensions_and_clickable_links.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/markdown/02_markdown_with_code_syntax_highlight.py b/sdk/python/examples/apps/controls_gallery/examples/displays/markdown/02_markdown_with_code_syntax_highlight.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/markdown/02_markdown_with_code_syntax_highlight.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/markdown/02_markdown_with_code_syntax_highlight.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/markdown/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/markdown/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/markdown/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/markdown/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/progressbar/01_progressbar_example.py b/sdk/python/examples/apps/controls_gallery/examples/displays/progressbar/01_progressbar_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/progressbar/01_progressbar_example.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/progressbar/01_progressbar_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/progressbar/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/progressbar/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/progressbar/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/progressbar/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/progressring/01_progressring_example.py b/sdk/python/examples/apps/controls_gallery/examples/displays/progressring/01_progressring_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/progressring/01_progressring_example.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/progressring/01_progressring_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/progressring/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/progressring/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/progressring/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/progressring/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/01_custom_text_styles.py b/sdk/python/examples/apps/controls_gallery/examples/displays/text/01_custom_text_styles.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/01_custom_text_styles.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/text/01_custom_text_styles.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/02_pre_defined_theme_text_styles.py b/sdk/python/examples/apps/controls_gallery/examples/displays/text/02_pre_defined_theme_text_styles.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/02_pre_defined_theme_text_styles.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/text/02_pre_defined_theme_text_styles.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/03_font_with_variable_weight.py b/sdk/python/examples/apps/controls_gallery/examples/displays/text/03_font_with_variable_weight.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/03_font_with_variable_weight.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/text/03_font_with_variable_weight.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/05_rich_text_basics.py b/sdk/python/examples/apps/controls_gallery/examples/displays/text/05_rich_text_basics.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/05_rich_text_basics.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/text/05_rich_text_basics.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/06_rich_text_with_borders_and_stroke.py b/sdk/python/examples/apps/controls_gallery/examples/displays/text/06_rich_text_with_borders_and_stroke.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/06_rich_text_with_borders_and_stroke.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/text/06_rich_text_with_borders_and_stroke.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/07_rich_text_with_gradient.py b/sdk/python/examples/apps/controls_gallery/examples/displays/text/07_rich_text_with_gradient.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/07_rich_text_with_gradient.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/text/07_rich_text_with_gradient.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/08_selectable_text.py b/sdk/python/examples/apps/controls_gallery/examples/displays/text/08_selectable_text.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/08_selectable_text.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/text/08_selectable_text.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/09_text_with_tooltip_with_a_custom_decoration.py b/sdk/python/examples/apps/controls_gallery/examples/displays/text/09_text_with_tooltip_with_a_custom_decoration.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/09_text_with_tooltip_with_a_custom_decoration.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/text/09_text_with_tooltip_with_a_custom_decoration.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/10_text_with_variable_properties.py b/sdk/python/examples/apps/controls_gallery/examples/displays/text/10_text_with_variable_properties.py similarity index 99% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/10_text_with_variable_properties.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/text/10_text_with_variable_properties.py index 31b7d4e133..dd72b34e81 100644 --- a/sdk/python/examples/apps/controls-gallery/examples/displays/text/10_text_with_variable_properties.py +++ b/sdk/python/examples/apps/controls_gallery/examples/displays/text/10_text_with_variable_properties.py @@ -1,6 +1,7 @@ -import flet as ft from components.properties_table import PropertiesList +import flet as ft + name = "Text with variable properties" diff --git a/sdk/python/examples/apps/controls-gallery/examples/displays/text/index.py b/sdk/python/examples/apps/controls_gallery/examples/displays/text/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/displays/text/index.py rename to sdk/python/examples/apps/controls_gallery/examples/displays/text/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/autocomplete/01_autocomplete_example.py b/sdk/python/examples/apps/controls_gallery/examples/input/autocomplete/01_autocomplete_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/autocomplete/01_autocomplete_example.py rename to sdk/python/examples/apps/controls_gallery/examples/input/autocomplete/01_autocomplete_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/autocomplete/02_autocomplete_properties.py b/sdk/python/examples/apps/controls_gallery/examples/input/autocomplete/02_autocomplete_properties.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/autocomplete/02_autocomplete_properties.py rename to sdk/python/examples/apps/controls_gallery/examples/input/autocomplete/02_autocomplete_properties.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/autocomplete/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/autocomplete/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/autocomplete/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/autocomplete/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/autofillgroup/01_autofillgroup_example.py b/sdk/python/examples/apps/controls_gallery/examples/input/autofillgroup/01_autofillgroup_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/autofillgroup/01_autofillgroup_example.py rename to sdk/python/examples/apps/controls_gallery/examples/input/autofillgroup/01_autofillgroup_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/autofillgroup/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/autofillgroup/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/autofillgroup/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/autofillgroup/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/checkbox/01_basic_checkboxes.py b/sdk/python/examples/apps/controls_gallery/examples/input/checkbox/01_basic_checkboxes.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/checkbox/01_basic_checkboxes.py rename to sdk/python/examples/apps/controls_gallery/examples/input/checkbox/01_basic_checkboxes.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/checkbox/02_checkbox_with_change_event.py b/sdk/python/examples/apps/controls_gallery/examples/input/checkbox/02_checkbox_with_change_event.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/checkbox/02_checkbox_with_change_event.py rename to sdk/python/examples/apps/controls_gallery/examples/input/checkbox/02_checkbox_with_change_event.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/checkbox/03_checkbox_properties.py b/sdk/python/examples/apps/controls_gallery/examples/input/checkbox/03_checkbox_properties.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/checkbox/03_checkbox_properties.py rename to sdk/python/examples/apps/controls_gallery/examples/input/checkbox/03_checkbox_properties.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/checkbox/04_checkbox_label_style_properties.py b/sdk/python/examples/apps/controls_gallery/examples/input/checkbox/04_checkbox_label_style_properties.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/checkbox/04_checkbox_label_style_properties.py rename to sdk/python/examples/apps/controls_gallery/examples/input/checkbox/04_checkbox_label_style_properties.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/checkbox/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/checkbox/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/checkbox/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/checkbox/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/chip/01_assist_chips.py b/sdk/python/examples/apps/controls_gallery/examples/input/chip/01_assist_chips.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/chip/01_assist_chips.py rename to sdk/python/examples/apps/controls_gallery/examples/input/chip/01_assist_chips.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/chip/02_filter_chips.py b/sdk/python/examples/apps/controls_gallery/examples/input/chip/02_filter_chips.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/chip/02_filter_chips.py rename to sdk/python/examples/apps/controls_gallery/examples/input/chip/02_filter_chips.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/chip/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/chip/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/chip/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/chip/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/cupertinocheckbox/01_cupertinocheckbox_example.py b/sdk/python/examples/apps/controls_gallery/examples/input/cupertinocheckbox/01_cupertinocheckbox_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/cupertinocheckbox/01_cupertinocheckbox_example.py rename to sdk/python/examples/apps/controls_gallery/examples/input/cupertinocheckbox/01_cupertinocheckbox_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/cupertinocheckbox/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/cupertinocheckbox/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/cupertinocheckbox/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/cupertinocheckbox/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/cupertinoradio/01_cupertino_radio_example.py b/sdk/python/examples/apps/controls_gallery/examples/input/cupertinoradio/01_cupertino_radio_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/cupertinoradio/01_cupertino_radio_example.py rename to sdk/python/examples/apps/controls_gallery/examples/input/cupertinoradio/01_cupertino_radio_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/cupertinoradio/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/cupertinoradio/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/cupertinoradio/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/cupertinoradio/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/cupertinoslider/01_cupertino_slider_example.py b/sdk/python/examples/apps/controls_gallery/examples/input/cupertinoslider/01_cupertino_slider_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/cupertinoslider/01_cupertino_slider_example.py rename to sdk/python/examples/apps/controls_gallery/examples/input/cupertinoslider/01_cupertino_slider_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/cupertinoslider/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/cupertinoslider/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/cupertinoslider/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/cupertinoslider/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/cupertinoswitch/01_cupertino_switch_example.py b/sdk/python/examples/apps/controls_gallery/examples/input/cupertinoswitch/01_cupertino_switch_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/cupertinoswitch/01_cupertino_switch_example.py rename to sdk/python/examples/apps/controls_gallery/examples/input/cupertinoswitch/01_cupertino_switch_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/cupertinoswitch/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/cupertinoswitch/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/cupertinoswitch/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/cupertinoswitch/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/cupertinotextfield/01_cupertino_textfield_example.py b/sdk/python/examples/apps/controls_gallery/examples/input/cupertinotextfield/01_cupertino_textfield_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/cupertinotextfield/01_cupertino_textfield_example.py rename to sdk/python/examples/apps/controls_gallery/examples/input/cupertinotextfield/01_cupertino_textfield_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/cupertinotextfield/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/cupertinotextfield/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/cupertinotextfield/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/cupertinotextfield/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/dropdown/01_basic_dropdown.py b/sdk/python/examples/apps/controls_gallery/examples/input/dropdown/01_basic_dropdown.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/dropdown/01_basic_dropdown.py rename to sdk/python/examples/apps/controls_gallery/examples/input/dropdown/01_basic_dropdown.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/dropdown/02_dropdown_with_label_and_hint.py b/sdk/python/examples/apps/controls_gallery/examples/input/dropdown/02_dropdown_with_label_and_hint.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/dropdown/02_dropdown_with_label_and_hint.py rename to sdk/python/examples/apps/controls_gallery/examples/input/dropdown/02_dropdown_with_label_and_hint.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/dropdown/03_add_items_to_dropdown_options.py b/sdk/python/examples/apps/controls_gallery/examples/input/dropdown/03_add_items_to_dropdown_options.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/dropdown/03_add_items_to_dropdown_options.py rename to sdk/python/examples/apps/controls_gallery/examples/input/dropdown/03_add_items_to_dropdown_options.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/dropdown/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/dropdown/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/dropdown/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/dropdown/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/radio/01_basic_radiogroup.py b/sdk/python/examples/apps/controls_gallery/examples/input/radio/01_basic_radiogroup.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/radio/01_basic_radiogroup.py rename to sdk/python/examples/apps/controls_gallery/examples/input/radio/01_basic_radiogroup.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/radio/02_radio_group_with_change_event.py b/sdk/python/examples/apps/controls_gallery/examples/input/radio/02_radio_group_with_change_event.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/radio/02_radio_group_with_change_event.py rename to sdk/python/examples/apps/controls_gallery/examples/input/radio/02_radio_group_with_change_event.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/radio/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/radio/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/radio/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/radio/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/rangeslider/01_rangeslider_example.py b/sdk/python/examples/apps/controls_gallery/examples/input/rangeslider/01_rangeslider_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/rangeslider/01_rangeslider_example.py rename to sdk/python/examples/apps/controls_gallery/examples/input/rangeslider/01_rangeslider_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/rangeslider/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/rangeslider/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/rangeslider/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/rangeslider/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/searchbar/01_searchbarexample.py b/sdk/python/examples/apps/controls_gallery/examples/input/searchbar/01_searchbarexample.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/searchbar/01_searchbarexample.py rename to sdk/python/examples/apps/controls_gallery/examples/input/searchbar/01_searchbarexample.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/searchbar/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/searchbar/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/searchbar/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/searchbar/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/slider/01_basic_sliders.py b/sdk/python/examples/apps/controls_gallery/examples/input/slider/01_basic_sliders.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/slider/01_basic_sliders.py rename to sdk/python/examples/apps/controls_gallery/examples/input/slider/01_basic_sliders.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/slider/02_sliders_with_values.py b/sdk/python/examples/apps/controls_gallery/examples/input/slider/02_sliders_with_values.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/slider/02_sliders_with_values.py rename to sdk/python/examples/apps/controls_gallery/examples/input/slider/02_sliders_with_values.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/slider/03_slider_with_change_event.py b/sdk/python/examples/apps/controls_gallery/examples/input/slider/03_slider_with_change_event.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/slider/03_slider_with_change_event.py rename to sdk/python/examples/apps/controls_gallery/examples/input/slider/03_slider_with_change_event.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/slider/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/slider/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/slider/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/slider/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/switch/01_basic_switches.py b/sdk/python/examples/apps/controls_gallery/examples/input/switch/01_basic_switches.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/switch/01_basic_switches.py rename to sdk/python/examples/apps/controls_gallery/examples/input/switch/01_basic_switches.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/switch/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/switch/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/switch/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/switch/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/textfield/01_basic_textfields.py b/sdk/python/examples/apps/controls_gallery/examples/input/textfield/01_basic_textfields.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/textfield/01_basic_textfields.py rename to sdk/python/examples/apps/controls_gallery/examples/input/textfield/01_basic_textfields.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/textfield/02_textfield_with_change_event.py b/sdk/python/examples/apps/controls_gallery/examples/input/textfield/02_textfield_with_change_event.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/textfield/02_textfield_with_change_event.py rename to sdk/python/examples/apps/controls_gallery/examples/input/textfield/02_textfield_with_change_event.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/textfield/03_password_with_reveal_button.py b/sdk/python/examples/apps/controls_gallery/examples/input/textfield/03_password_with_reveal_button.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/textfield/03_password_with_reveal_button.py rename to sdk/python/examples/apps/controls_gallery/examples/input/textfield/03_password_with_reveal_button.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/textfield/04_multiline_textfields.py b/sdk/python/examples/apps/controls_gallery/examples/input/textfield/04_multiline_textfields.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/textfield/04_multiline_textfields.py rename to sdk/python/examples/apps/controls_gallery/examples/input/textfield/04_multiline_textfields.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/textfield/05_underlined_and_borderless_textfields.py b/sdk/python/examples/apps/controls_gallery/examples/input/textfield/05_underlined_and_borderless_textfields.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/textfield/05_underlined_and_borderless_textfields.py rename to sdk/python/examples/apps/controls_gallery/examples/input/textfield/05_underlined_and_borderless_textfields.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/textfield/06_textfields_with_prefixes_and_suffixes.py b/sdk/python/examples/apps/controls_gallery/examples/input/textfield/06_textfields_with_prefixes_and_suffixes.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/textfield/06_textfields_with_prefixes_and_suffixes.py rename to sdk/python/examples/apps/controls_gallery/examples/input/textfield/06_textfields_with_prefixes_and_suffixes.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/input/textfield/index.py b/sdk/python/examples/apps/controls_gallery/examples/input/textfield/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/input/textfield/index.py rename to sdk/python/examples/apps/controls_gallery/examples/input/textfield/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/card/01_card_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/card/01_card_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/card/01_card_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/card/01_card_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/card/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/card/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/card/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/card/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/column/01_column_spacing.py b/sdk/python/examples/apps/controls_gallery/examples/layout/column/01_column_spacing.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/column/01_column_spacing.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/column/01_column_spacing.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/column/02_column_wrapping.py b/sdk/python/examples/apps/controls_gallery/examples/layout/column/02_column_wrapping.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/column/02_column_wrapping.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/column/02_column_wrapping.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/column/03_column_vertical_alignment.py b/sdk/python/examples/apps/controls_gallery/examples/layout/column/03_column_vertical_alignment.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/column/03_column_vertical_alignment.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/column/03_column_vertical_alignment.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/column/04_column_horizontal_alignment.py b/sdk/python/examples/apps/controls_gallery/examples/layout/column/04_column_horizontal_alignment.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/column/04_column_horizontal_alignment.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/column/04_column_horizontal_alignment.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/column/05_column_scroll_to.py b/sdk/python/examples/apps/controls_gallery/examples/layout/column/05_column_scroll_to.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/column/05_column_scroll_to.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/column/05_column_scroll_to.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/column/06_infinite_scroll_list.py b/sdk/python/examples/apps/controls_gallery/examples/layout/column/06_infinite_scroll_list.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/column/06_infinite_scroll_list.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/column/06_infinite_scroll_list.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/column/07_scrolling_column_programmatically.py b/sdk/python/examples/apps/controls_gallery/examples/layout/column/07_scrolling_column_programmatically.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/column/07_scrolling_column_programmatically.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/column/07_scrolling_column_programmatically.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/column/08_receiving_scroll_notifications.py b/sdk/python/examples/apps/controls_gallery/examples/layout/column/08_receiving_scroll_notifications.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/column/08_receiving_scroll_notifications.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/column/08_receiving_scroll_notifications.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/column/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/column/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/column/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/column/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/container/01_clickable_containers.py b/sdk/python/examples/apps/controls_gallery/examples/layout/container/01_clickable_containers.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/container/01_clickable_containers.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/container/01_clickable_containers.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/container/02_container_alignment.py b/sdk/python/examples/apps/controls_gallery/examples/layout/container/02_container_alignment.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/container/02_container_alignment.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/container/02_container_alignment.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/container/03_animate_container.py b/sdk/python/examples/apps/controls_gallery/examples/layout/container/03_animate_container.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/container/03_animate_container.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/container/03_animate_container.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/container/04_container_gradient.py b/sdk/python/examples/apps/controls_gallery/examples/layout/container/04_container_gradient.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/container/04_container_gradient.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/container/04_container_gradient.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/container/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/container/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/container/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/container/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/cupertinolisttile/01_cupertinolisttile_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/cupertinolisttile/01_cupertinolisttile_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/cupertinolisttile/01_cupertinolisttile_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/cupertinolisttile/01_cupertinolisttile_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/cupertinolisttile/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/cupertinolisttile/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/cupertinolisttile/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/cupertinolisttile/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/datatable/01_basic_datatable.py b/sdk/python/examples/apps/controls_gallery/examples/layout/datatable/01_basic_datatable.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/datatable/01_basic_datatable.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/datatable/01_basic_datatable.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/datatable/02_styled_datatable.py b/sdk/python/examples/apps/controls_gallery/examples/layout/datatable/02_styled_datatable.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/datatable/02_styled_datatable.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/datatable/02_styled_datatable.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/datatable/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/datatable/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/datatable/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/datatable/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/dismissible/01_dismissible_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/dismissible/01_dismissible_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/dismissible/01_dismissible_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/dismissible/01_dismissible_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/dismissible/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/dismissible/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/dismissible/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/dismissible/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/divider/01_divider_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/divider/01_divider_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/divider/01_divider_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/divider/01_divider_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/divider/02_draggable_divider.py b/sdk/python/examples/apps/controls_gallery/examples/layout/divider/02_draggable_divider.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/divider/02_draggable_divider.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/divider/02_draggable_divider.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/divider/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/divider/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/divider/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/divider/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/expansionpanellist/01_expansionpanellist_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/expansionpanellist/01_expansionpanellist_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/expansionpanellist/01_expansionpanellist_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/expansionpanellist/01_expansionpanellist_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/expansionpanellist/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/expansionpanellist/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/expansionpanellist/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/expansionpanellist/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/expansiontile/01_expansiontile_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/expansiontile/01_expansiontile_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/expansiontile/01_expansiontile_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/expansiontile/01_expansiontile_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/expansiontile/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/expansiontile/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/expansiontile/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/expansiontile/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/gridview/01_photo_gallery.py b/sdk/python/examples/apps/controls_gallery/examples/layout/gridview/01_photo_gallery.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/gridview/01_photo_gallery.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/gridview/01_photo_gallery.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/gridview/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/gridview/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/gridview/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/gridview/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/listtile/01_listtile_examples.py b/sdk/python/examples/apps/controls_gallery/examples/layout/listtile/01_listtile_examples.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/listtile/01_listtile_examples.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/listtile/01_listtile_examples.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/listtile/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/listtile/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/listtile/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/listtile/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/listview/01_auto_scrolling_listview.py b/sdk/python/examples/apps/controls_gallery/examples/layout/listview/01_auto_scrolling_listview.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/listview/01_auto_scrolling_listview.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/listview/01_auto_scrolling_listview.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/listview/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/listview/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/listview/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/listview/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/pagelet/01_pagelet_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/pagelet/01_pagelet_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/pagelet/01_pagelet_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/pagelet/01_pagelet_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/pagelet/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/pagelet/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/pagelet/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/pagelet/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/placeholder/01_placeholder_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/placeholder/01_placeholder_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/placeholder/01_placeholder_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/placeholder/01_placeholder_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/placeholder/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/placeholder/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/placeholder/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/placeholder/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/responsiverow/01_responsiverow_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/responsiverow/01_responsiverow_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/responsiverow/01_responsiverow_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/responsiverow/01_responsiverow_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/responsiverow/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/responsiverow/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/responsiverow/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/responsiverow/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/row/01_row_spacing.py b/sdk/python/examples/apps/controls_gallery/examples/layout/row/01_row_spacing.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/row/01_row_spacing.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/row/01_row_spacing.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/row/02_row_wrapping.py b/sdk/python/examples/apps/controls_gallery/examples/layout/row/02_row_wrapping.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/row/02_row_wrapping.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/row/02_row_wrapping.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/row/03_row_horizontal_alignment.py b/sdk/python/examples/apps/controls_gallery/examples/layout/row/03_row_horizontal_alignment.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/row/03_row_horizontal_alignment.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/row/03_row_horizontal_alignment.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/row/04_row_vertical_alignment.py b/sdk/python/examples/apps/controls_gallery/examples/layout/row/04_row_vertical_alignment.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/row/04_row_vertical_alignment.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/row/04_row_vertical_alignment.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/row/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/row/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/row/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/row/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/safearea/01_safearea_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/safearea/01_safearea_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/safearea/01_safearea_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/safearea/01_safearea_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/safearea/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/safearea/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/safearea/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/safearea/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/stack/01_transparent_title_over_an_image.py b/sdk/python/examples/apps/controls_gallery/examples/layout/stack/01_transparent_title_over_an_image.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/stack/01_transparent_title_over_an_image.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/stack/01_transparent_title_over_an_image.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/stack/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/stack/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/stack/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/stack/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/tabs/01_tabs_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/tabs/01_tabs_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/tabs/01_tabs_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/tabs/01_tabs_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/tabs/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/tabs/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/tabs/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/tabs/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/verticaldivider/01_verticaldivider_example.py b/sdk/python/examples/apps/controls_gallery/examples/layout/verticaldivider/01_verticaldivider_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/verticaldivider/01_verticaldivider_example.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/verticaldivider/01_verticaldivider_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/verticaldivider/02_draggable_verticaldivider.py b/sdk/python/examples/apps/controls_gallery/examples/layout/verticaldivider/02_draggable_verticaldivider.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/verticaldivider/02_draggable_verticaldivider.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/verticaldivider/02_draggable_verticaldivider.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/layout/verticaldivider/index.py b/sdk/python/examples/apps/controls_gallery/examples/layout/verticaldivider/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/layout/verticaldivider/index.py rename to sdk/python/examples/apps/controls_gallery/examples/layout/verticaldivider/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/appbar/01_appbar_example.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/appbar/01_appbar_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/appbar/01_appbar_example.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/appbar/01_appbar_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/appbar/index.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/appbar/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/appbar/index.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/appbar/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/bottomappbar/01_bottomappbar_example.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/bottomappbar/01_bottomappbar_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/bottomappbar/01_bottomappbar_example.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/bottomappbar/01_bottomappbar_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/bottomappbar/index.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/bottomappbar/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/bottomappbar/index.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/bottomappbar/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/cupertinoappbar/01_cupertino_appbar_example.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/cupertinoappbar/01_cupertino_appbar_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/cupertinoappbar/01_cupertino_appbar_example.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/cupertinoappbar/01_cupertino_appbar_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/cupertinoappbar/index.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/cupertinoappbar/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/cupertinoappbar/index.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/cupertinoappbar/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/cupertinonavigationbar/01_navigationbar_example.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/cupertinonavigationbar/01_navigationbar_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/cupertinonavigationbar/01_navigationbar_example.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/cupertinonavigationbar/01_navigationbar_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/cupertinonavigationbar/index.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/cupertinonavigationbar/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/cupertinonavigationbar/index.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/cupertinonavigationbar/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/menubar/01_menubar_example.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/menubar/01_menubar_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/menubar/01_menubar_example.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/menubar/01_menubar_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/menubar/index.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/menubar/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/menubar/index.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/menubar/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/navigationbar/01_navigationbar_example.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/navigationbar/01_navigationbar_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/navigationbar/01_navigationbar_example.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/navigationbar/01_navigationbar_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/navigationbar/index.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/navigationbar/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/navigationbar/index.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/navigationbar/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/navigationdrawer/01_navigation_drawer_example.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/navigationdrawer/01_navigation_drawer_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/navigationdrawer/01_navigation_drawer_example.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/navigationdrawer/01_navigation_drawer_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/navigationdrawer/index.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/navigationdrawer/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/navigationdrawer/index.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/navigationdrawer/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/navigationrail/01_navigationrail_example.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/navigationrail/01_navigationrail_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/navigationrail/01_navigationrail_example.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/navigationrail/01_navigationrail_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/navigation/navigationrail/index.py b/sdk/python/examples/apps/controls_gallery/examples/navigation/navigationrail/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/navigation/navigationrail/index.py rename to sdk/python/examples/apps/controls_gallery/examples/navigation/navigationrail/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/audio/01_autoplay_audio.py b/sdk/python/examples/apps/controls_gallery/examples/utility/audio/01_autoplay_audio.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/audio/01_autoplay_audio.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/audio/01_autoplay_audio.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/audio/index.py b/sdk/python/examples/apps/controls_gallery/examples/utility/audio/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/audio/index.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/audio/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/draggable/01_drag_and_drop_colors.py b/sdk/python/examples/apps/controls_gallery/examples/utility/draggable/01_drag_and_drop_colors.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/draggable/01_drag_and_drop_colors.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/draggable/01_drag_and_drop_colors.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/draggable/index.py b/sdk/python/examples/apps/controls_gallery/examples/utility/draggable/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/draggable/index.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/draggable/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/filepicker/01_pick_multiple_files.py b/sdk/python/examples/apps/controls_gallery/examples/utility/filepicker/01_pick_multiple_files.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/filepicker/01_pick_multiple_files.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/filepicker/01_pick_multiple_files.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/filepicker/index.py b/sdk/python/examples/apps/controls_gallery/examples/utility/filepicker/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/filepicker/index.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/filepicker/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/gesturedetector/01_draggable_containers.py b/sdk/python/examples/apps/controls_gallery/examples/utility/gesturedetector/01_draggable_containers.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/gesturedetector/01_draggable_containers.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/gesturedetector/01_draggable_containers.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/gesturedetector/index.py b/sdk/python/examples/apps/controls_gallery/examples/utility/gesturedetector/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/gesturedetector/index.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/gesturedetector/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/interactiveviewer/01_interactive_viewer_example.py b/sdk/python/examples/apps/controls_gallery/examples/utility/interactiveviewer/01_interactive_viewer_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/interactiveviewer/01_interactive_viewer_example.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/interactiveviewer/01_interactive_viewer_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/interactiveviewer/index.py b/sdk/python/examples/apps/controls_gallery/examples/utility/interactiveviewer/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/interactiveviewer/index.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/interactiveviewer/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/shadermask/01_adding_a_pink_glow_around_image_edges.py b/sdk/python/examples/apps/controls_gallery/examples/utility/shadermask/01_adding_a_pink_glow_around_image_edges.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/shadermask/01_adding_a_pink_glow_around_image_edges.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/shadermask/01_adding_a_pink_glow_around_image_edges.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/shadermask/02_gradually_fade_out_image_to_the_bottom_edge.py b/sdk/python/examples/apps/controls_gallery/examples/utility/shadermask/02_gradually_fade_out_image_to_the_bottom_edge.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/shadermask/02_gradually_fade_out_image_to_the_bottom_edge.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/shadermask/02_gradually_fade_out_image_to_the_bottom_edge.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/shadermask/index.py b/sdk/python/examples/apps/controls_gallery/examples/utility/shadermask/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/shadermask/index.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/shadermask/index.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/video/01_video_example.py b/sdk/python/examples/apps/controls_gallery/examples/utility/video/01_video_example.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/video/01_video_example.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/video/01_video_example.py diff --git a/sdk/python/examples/apps/controls-gallery/examples/utility/video/index.py b/sdk/python/examples/apps/controls_gallery/examples/utility/video/index.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/examples/utility/video/index.py rename to sdk/python/examples/apps/controls_gallery/examples/utility/video/index.py diff --git a/sdk/python/examples/apps/controls-gallery/fly.toml b/sdk/python/examples/apps/controls_gallery/fly.toml similarity index 100% rename from sdk/python/examples/apps/controls-gallery/fly.toml rename to sdk/python/examples/apps/controls_gallery/fly.toml diff --git a/sdk/python/examples/apps/controls-gallery/gallerydata.py b/sdk/python/examples/apps/controls_gallery/gallerydata.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/gallerydata.py rename to sdk/python/examples/apps/controls_gallery/gallerydata.py diff --git a/sdk/python/examples/apps/controls-gallery/main.py b/sdk/python/examples/apps/controls_gallery/main.py similarity index 100% rename from sdk/python/examples/apps/controls-gallery/main.py rename to sdk/python/examples/apps/controls_gallery/main.py diff --git a/sdk/python/examples/apps/controls-gallery/pyproject.toml b/sdk/python/examples/apps/controls_gallery/pyproject.toml similarity index 100% rename from sdk/python/examples/apps/controls-gallery/pyproject.toml rename to sdk/python/examples/apps/controls_gallery/pyproject.toml diff --git a/sdk/python/examples/apps/counter-flutter/Dockerfile b/sdk/python/examples/apps/counter_flutter/Dockerfile similarity index 100% rename from sdk/python/examples/apps/counter-flutter/Dockerfile rename to sdk/python/examples/apps/counter_flutter/Dockerfile diff --git a/sdk/python/examples/apps/counter-flutter/assets/favicon.png b/sdk/python/examples/apps/counter_flutter/assets/favicon.png similarity index 100% rename from sdk/python/examples/apps/counter-flutter/assets/favicon.png rename to sdk/python/examples/apps/counter_flutter/assets/favicon.png diff --git a/sdk/python/examples/apps/counter-flutter/assets/icon.png b/sdk/python/examples/apps/counter_flutter/assets/icon.png similarity index 100% rename from sdk/python/examples/apps/counter-flutter/assets/icon.png rename to sdk/python/examples/apps/counter_flutter/assets/icon.png diff --git a/sdk/python/examples/apps/counter-flutter/assets/manifest.json b/sdk/python/examples/apps/counter_flutter/assets/manifest.json similarity index 100% rename from sdk/python/examples/apps/counter-flutter/assets/manifest.json rename to sdk/python/examples/apps/counter_flutter/assets/manifest.json diff --git a/sdk/python/examples/apps/counter-flutter/fly.toml b/sdk/python/examples/apps/counter_flutter/fly.toml similarity index 100% rename from sdk/python/examples/apps/counter-flutter/fly.toml rename to sdk/python/examples/apps/counter_flutter/fly.toml diff --git a/sdk/python/examples/apps/counter-flutter/main.py b/sdk/python/examples/apps/counter_flutter/main.py similarity index 100% rename from sdk/python/examples/apps/counter-flutter/main.py rename to sdk/python/examples/apps/counter_flutter/main.py diff --git a/sdk/python/examples/apps/counter-flutter/requirements.txt b/sdk/python/examples/apps/counter_flutter/requirements.txt similarity index 100% rename from sdk/python/examples/apps/counter-flutter/requirements.txt rename to sdk/python/examples/apps/counter_flutter/requirements.txt diff --git a/sdk/python/examples/apps/custom-loading-image/assets/icons/loading-animation.png b/sdk/python/examples/apps/custom_loading_image/assets/icons/loading-animation.png similarity index 100% rename from sdk/python/examples/apps/custom-loading-image/assets/icons/loading-animation.png rename to sdk/python/examples/apps/custom_loading_image/assets/icons/loading-animation.png diff --git a/sdk/python/examples/apps/custom-loading-image/assets/manifest.json b/sdk/python/examples/apps/custom_loading_image/assets/manifest.json similarity index 100% rename from sdk/python/examples/apps/custom-loading-image/assets/manifest.json rename to sdk/python/examples/apps/custom_loading_image/assets/manifest.json diff --git a/sdk/python/examples/apps/custom-loading-image/main.py b/sdk/python/examples/apps/custom_loading_image/main.py similarity index 100% rename from sdk/python/examples/apps/custom-loading-image/main.py rename to sdk/python/examples/apps/custom_loading_image/main.py diff --git a/sdk/python/examples/apps/desktop-window-manager/page_window.py b/sdk/python/examples/apps/desktop_window_manager/page_window.py similarity index 100% rename from sdk/python/examples/apps/desktop-window-manager/page_window.py rename to sdk/python/examples/apps/desktop_window_manager/page_window.py diff --git a/sdk/python/examples/apps/flet-animation/main.py b/sdk/python/examples/apps/flet_animation/main.py similarity index 100% rename from sdk/python/examples/apps/flet-animation/main.py rename to sdk/python/examples/apps/flet_animation/main.py diff --git a/sdk/python/examples/apps/flet-animation/requirements.txt b/sdk/python/examples/apps/flet_animation/requirements.txt similarity index 100% rename from sdk/python/examples/apps/flet-animation/requirements.txt rename to sdk/python/examples/apps/flet_animation/requirements.txt diff --git a/sdk/python/examples/apps/hello-world/hello.py b/sdk/python/examples/apps/hello_world/hello.py similarity index 100% rename from sdk/python/examples/apps/hello-world/hello.py rename to sdk/python/examples/apps/hello_world/hello.py diff --git a/sdk/python/examples/apps/hello-world/requirements.txt b/sdk/python/examples/apps/hello_world/requirements.txt similarity index 100% rename from sdk/python/examples/apps/hello-world/requirements.txt rename to sdk/python/examples/apps/hello_world/requirements.txt diff --git a/sdk/python/examples/apps/icons-browser/Dockerfile b/sdk/python/examples/apps/icons_browser/Dockerfile similarity index 100% rename from sdk/python/examples/apps/icons-browser/Dockerfile rename to sdk/python/examples/apps/icons_browser/Dockerfile diff --git a/sdk/python/examples/apps/icons-browser/README.md b/sdk/python/examples/apps/icons_browser/README.md similarity index 100% rename from sdk/python/examples/apps/icons-browser/README.md rename to sdk/python/examples/apps/icons_browser/README.md diff --git a/sdk/python/examples/apps/icons-browser/fly.toml b/sdk/python/examples/apps/icons_browser/fly.toml similarity index 100% rename from sdk/python/examples/apps/icons-browser/fly.toml rename to sdk/python/examples/apps/icons_browser/fly.toml diff --git a/sdk/python/examples/apps/icons-browser/main.py b/sdk/python/examples/apps/icons_browser/main.py similarity index 100% rename from sdk/python/examples/apps/icons-browser/main.py rename to sdk/python/examples/apps/icons_browser/main.py diff --git a/sdk/python/examples/apps/icons-browser/requirements.txt b/sdk/python/examples/apps/icons_browser/requirements.txt similarity index 100% rename from sdk/python/examples/apps/icons-browser/requirements.txt rename to sdk/python/examples/apps/icons_browser/requirements.txt diff --git a/sdk/python/examples/apps/icons-cupertino-browser/main.py b/sdk/python/examples/apps/icons_cupertino_browser/main.py similarity index 100% rename from sdk/python/examples/apps/icons-cupertino-browser/main.py rename to sdk/python/examples/apps/icons_cupertino_browser/main.py diff --git a/sdk/python/examples/apps/icons-cupertino-browser/requirements.txt b/sdk/python/examples/apps/icons_cupertino_browser/requirements.txt similarity index 100% rename from sdk/python/examples/apps/icons-cupertino-browser/requirements.txt rename to sdk/python/examples/apps/icons_cupertino_browser/requirements.txt diff --git a/sdk/python/examples/apps/routing-navigation/building_views_on_route_change.py b/sdk/python/examples/apps/routing_navigation/building_views_on_route_change.py similarity index 100% rename from sdk/python/examples/apps/routing-navigation/building_views_on_route_change.py rename to sdk/python/examples/apps/routing_navigation/building_views_on_route_change.py diff --git a/sdk/python/examples/apps/routing-navigation/home_store.py b/sdk/python/examples/apps/routing_navigation/home_store.py similarity index 100% rename from sdk/python/examples/apps/routing-navigation/home_store.py rename to sdk/python/examples/apps/routing_navigation/home_store.py diff --git a/sdk/python/examples/apps/routing-navigation/initial_route.py b/sdk/python/examples/apps/routing_navigation/initial_route.py similarity index 100% rename from sdk/python/examples/apps/routing-navigation/initial_route.py rename to sdk/python/examples/apps/routing_navigation/initial_route.py diff --git a/sdk/python/examples/apps/routing-navigation/route_change_event.py b/sdk/python/examples/apps/routing_navigation/route_change_event.py similarity index 100% rename from sdk/python/examples/apps/routing-navigation/route_change_event.py rename to sdk/python/examples/apps/routing_navigation/route_change_event.py diff --git a/sdk/python/examples/apps/studio-gallery/assets/github-mark.svg b/sdk/python/examples/apps/studio_gallery/assets/github-mark.svg similarity index 100% rename from sdk/python/examples/apps/studio-gallery/assets/github-mark.svg rename to sdk/python/examples/apps/studio_gallery/assets/github-mark.svg diff --git a/sdk/python/examples/apps/studio-gallery/audio_player.py b/sdk/python/examples/apps/studio_gallery/audio_player.py similarity index 100% rename from sdk/python/examples/apps/studio-gallery/audio_player.py rename to sdk/python/examples/apps/studio_gallery/audio_player.py diff --git a/sdk/python/examples/apps/studio-gallery/buttons.py b/sdk/python/examples/apps/studio_gallery/buttons.py similarity index 100% rename from sdk/python/examples/apps/studio-gallery/buttons.py rename to sdk/python/examples/apps/studio_gallery/buttons.py diff --git a/sdk/python/examples/apps/studio-gallery/calculator.py b/sdk/python/examples/apps/studio_gallery/calculator.py similarity index 100% rename from sdk/python/examples/apps/studio-gallery/calculator.py rename to sdk/python/examples/apps/studio_gallery/calculator.py diff --git a/sdk/python/examples/apps/studio-gallery/charts.py b/sdk/python/examples/apps/studio_gallery/charts.py similarity index 100% rename from sdk/python/examples/apps/studio-gallery/charts.py rename to sdk/python/examples/apps/studio_gallery/charts.py diff --git a/sdk/python/examples/apps/studio-gallery/counter.py b/sdk/python/examples/apps/studio_gallery/counter.py similarity index 100% rename from sdk/python/examples/apps/studio-gallery/counter.py rename to sdk/python/examples/apps/studio_gallery/counter.py diff --git a/sdk/python/examples/apps/studio-gallery/drawing_tool.py b/sdk/python/examples/apps/studio_gallery/drawing_tool.py similarity index 100% rename from sdk/python/examples/apps/studio-gallery/drawing_tool.py rename to sdk/python/examples/apps/studio_gallery/drawing_tool.py diff --git a/sdk/python/examples/apps/studio-gallery/entry_form.py b/sdk/python/examples/apps/studio_gallery/entry_form.py similarity index 100% rename from sdk/python/examples/apps/studio-gallery/entry_form.py rename to sdk/python/examples/apps/studio_gallery/entry_form.py diff --git a/sdk/python/examples/apps/studio-gallery/flet_animation.py b/sdk/python/examples/apps/studio_gallery/flet_animation.py similarity index 100% rename from sdk/python/examples/apps/studio-gallery/flet_animation.py rename to sdk/python/examples/apps/studio_gallery/flet_animation.py diff --git a/sdk/python/examples/apps/studio-gallery/main.py b/sdk/python/examples/apps/studio_gallery/main.py similarity index 95% rename from sdk/python/examples/apps/studio-gallery/main.py rename to sdk/python/examples/apps/studio_gallery/main.py index aafb37c88c..df3c39af6b 100644 --- a/sdk/python/examples/apps/studio-gallery/main.py +++ b/sdk/python/examples/apps/studio_gallery/main.py @@ -5,10 +5,11 @@ import counter import drawing_tool import entry_form -import flet as ft import flet_animation import to_do +import flet as ft + class AppTile(ft.ListTile): def __init__(self, name, view, icon_name, file_name): @@ -29,11 +30,10 @@ def app_button_clicked(self, e): title=ft.Text(f"{e.control.name}"), actions=[ ft.IconButton( - content=ft.Image( + icon=ft.Image( src="github-mark.svg", width=24, height=24 ), - url=f"https://github.com/flet-dev/examples/tree/main/python/apps/studio-gallery/{self.file_name}", - url_target="_blank", + url=f"https://github.com/flet-dev/examples/tree/main/python/apps/studio_gallery/{self.file_name}", ) ], ), diff --git a/sdk/python/examples/apps/studio-gallery/poetry.lock b/sdk/python/examples/apps/studio_gallery/poetry.lock similarity index 100% rename from sdk/python/examples/apps/studio-gallery/poetry.lock rename to sdk/python/examples/apps/studio_gallery/poetry.lock diff --git a/sdk/python/examples/apps/studio-gallery/pyproject.toml b/sdk/python/examples/apps/studio_gallery/pyproject.toml similarity index 100% rename from sdk/python/examples/apps/studio-gallery/pyproject.toml rename to sdk/python/examples/apps/studio_gallery/pyproject.toml diff --git a/sdk/python/examples/apps/studio-gallery/to_do.py b/sdk/python/examples/apps/studio_gallery/to_do.py similarity index 100% rename from sdk/python/examples/apps/studio-gallery/to_do.py rename to sdk/python/examples/apps/studio_gallery/to_do.py diff --git a/sdk/python/examples/publish-gallery.sh b/sdk/python/examples/publish-gallery.sh index a7056ad33e..2c02f5a6b1 100644 --- a/sdk/python/examples/publish-gallery.sh +++ b/sdk/python/examples/publish-gallery.sh @@ -2,13 +2,13 @@ pip install flet flet --version DIST_PATH=$PWD/python/dist flet publish python/apps/todo/todo.py --distpath $DIST_PATH/todo --base-url todo --app-name "Flet To-Do" --app-description "A classic To-Do app inspired by TodoMVC project." -flet publish python/apps/icons-browser/main.py --distpath $DIST_PATH/icons-browser --base-url icons-browser --app-name "Flet Icons Browser" --app-description "Quickly search through icons collection to use in your app." -flet publish python/apps/icons-cupertino-browser/main.py --distpath $DIST_PATH/icons-cupertino-browser --base-url icons-cupertino-browser --app-name "Flet Cupertino Icons Browser" --app-description "Quickly search through icons collection to use in your app." +flet publish python/apps/icons_browser/main.py --distpath $DIST_PATH/icons_browser --base-url icons_browser --app-name "Flet Icons Browser" --app-description "Quickly search through icons collection to use in your app." +flet publish python/apps/icons_cupertino_browser/main.py --distpath $DIST_PATH/icons_cupertino_browser --base-url icons_cupertino_browser --app-name "Flet Cupertino Icons Browser" --app-description "Quickly search through icons collection to use in your app." flet publish python/tutorials/calc/calc.py --distpath $DIST_PATH/calculator --base-url calculator --app-name "Calculator" --app-description "A simple calculator app written in Flet." flet publish python/tutorials/solitaire/solitaire-final-part1/main.py --distpath $DIST_PATH/solitaire --base-url solitaire --assets assets --app-name "Solitaire" --app-description "Learn how to handle gestures and position controls on a page." flet publish python/apps/trolli/src/main.py --distpath $DIST_PATH/trolli --base-url trolli --assets ../assets --route-url-strategy "hash" --app-name "Trolli" --app-description "A clone of Trello." -flet publish python/apps/routing-navigation/home_store.py --distpath $DIST_PATH/simple-routing --base-url simple-routing --route-url-strategy "hash" --app-name "Flet routing example" --app-description "An example of routing in Flet." +flet publish python/apps/routing_navigation/home_store.py --distpath $DIST_PATH/simple_routing --base-url simple_routing --route-url-strategy "hash" --app-name "Flet routing example" --app-description "An example of routing in Flet." flet publish python/apps/counter/counter.py --distpath $DIST_PATH/counter --base-url counter --app-name "Counter" --app-description "Counter to get an idea of Flet." -flet publish python/apps/flet-animation/main.py --distpath $DIST_PATH/flet-animation --base-url flet-animation --app-name "Flet animation" --app-description "An example of implicit animations in Flet." +flet publish python/apps/flet_animation/main.py --distpath $DIST_PATH/flet_animation --base-url flet_animation --app-name "Flet animation" --app-description "An example of implicit animations in Flet." flet publish python/apps/greeter/greeter.py --distpath $DIST_PATH/greeter --base-url greeter --app-name "Greeter" --app-description "A basic example of interactive forms in Flet." -flet publish python/apps/hello-world/hello.py --distpath $DIST_PATH/hello-world --base-url hello-world --app-name "Hello, world!" --app-description "A very minimal example of Flet app." +flet publish python/apps/hello_world/hello.py --distpath $DIST_PATH/hello_world --base-url hello_world --app-name "Hello, world!" --app-description "A very minimal example of Flet app."