diff --git a/sdk/python/examples/controls/navigation_drawer/__init__.py b/sdk/python/examples/controls/navigation_drawer/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/examples/controls/navigation_drawer/position_end.py b/sdk/python/examples/controls/navigation_drawer/position_end.py index 787c2f770d..85800af7f3 100644 --- a/sdk/python/examples/controls/navigation_drawer/position_end.py +++ b/sdk/python/examples/controls/navigation_drawer/position_end.py @@ -34,4 +34,5 @@ async def handle_change(e: ft.Event[ft.NavigationDrawer]): ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/navigation_drawer/position_start.py b/sdk/python/examples/controls/navigation_drawer/position_start.py index 855403b16a..4002748777 100644 --- a/sdk/python/examples/controls/navigation_drawer/position_start.py +++ b/sdk/python/examples/controls/navigation_drawer/position_start.py @@ -43,4 +43,5 @@ async def handle_change(e: ft.Event[ft.NavigationDrawer]): ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/navigation_rail/__init__.py b/sdk/python/examples/controls/navigation_rail/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/examples/controls/navigation_rail/basic.py b/sdk/python/examples/controls/navigation_rail/basic.py index 3322ef31ac..d43fee2ac8 100644 --- a/sdk/python/examples/controls/navigation_rail/basic.py +++ b/sdk/python/examples/controls/navigation_rail/basic.py @@ -49,4 +49,5 @@ def main(page: ft.Page): ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/outlined_button/__init__.py b/sdk/python/examples/controls/outlined_button/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/examples/controls/outlined_button/basic.py b/sdk/python/examples/controls/outlined_button/basic.py index 9745033c33..2f9e2dcfd8 100644 --- a/sdk/python/examples/controls/outlined_button/basic.py +++ b/sdk/python/examples/controls/outlined_button/basic.py @@ -10,4 +10,5 @@ def main(page: ft.Page): ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/outlined_button/custom_content.py b/sdk/python/examples/controls/outlined_button/custom_content.py index c00165153b..b56740234d 100644 --- a/sdk/python/examples/controls/outlined_button/custom_content.py +++ b/sdk/python/examples/controls/outlined_button/custom_content.py @@ -33,4 +33,5 @@ def main(page: ft.Page): ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/outlined_button/handling_clicks.py b/sdk/python/examples/controls/outlined_button/handling_clicks.py index d838256a6b..dab5b33bf3 100644 --- a/sdk/python/examples/controls/outlined_button/handling_clicks.py +++ b/sdk/python/examples/controls/outlined_button/handling_clicks.py @@ -10,14 +10,22 @@ def handle_button_click(e: ft.Event[ft.OutlinedButton]): message.value = f"Button clicked {button.data} time(s)" page.update() + button = ft.OutlinedButton( + content="Button with 'click' event", + data=0, + on_click=handle_button_click, + ) + message = ft.Text() + page.add( - button := ft.OutlinedButton( - content="Button with 'click' event", - data=0, - on_click=handle_button_click, - ), - message := ft.Text(), + ft.Column( + controls=[button, message], + alignment=ft.MainAxisAlignment.CENTER, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + expand=True, + ) ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/outlined_button/icons.py b/sdk/python/examples/controls/outlined_button/icons.py index 5821d56af8..9f1d045ce7 100644 --- a/sdk/python/examples/controls/outlined_button/icons.py +++ b/sdk/python/examples/controls/outlined_button/icons.py @@ -14,4 +14,5 @@ def main(page: ft.Page): ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/placeholder/__init__.py b/sdk/python/examples/controls/placeholder/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/examples/controls/placeholder/basic.py b/sdk/python/examples/controls/placeholder/basic.py index 9b2f0e197e..d9473d9a5b 100644 --- a/sdk/python/examples/controls/placeholder/basic.py +++ b/sdk/python/examples/controls/placeholder/basic.py @@ -5,9 +5,13 @@ def main(page: ft.Page): page.add( ft.Placeholder( expand=True, - color=ft.Colors.random(), + color=ft.Colors.GREEN_ACCENT, + fallback_height=200, + fallback_width=300, + stroke_width=20, ) ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/popup_menu_button/__init__.py b/sdk/python/examples/controls/popup_menu_button/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/examples/controls/popup_menu_button/basic.py b/sdk/python/examples/controls/popup_menu_button/basic.py index 4bfe453a87..c81b54bc59 100644 --- a/sdk/python/examples/controls/popup_menu_button/basic.py +++ b/sdk/python/examples/controls/popup_menu_button/basic.py @@ -8,6 +8,7 @@ def handle_check_item_click(e: ft.Event[ft.PopupMenuItem]): page.add( ft.PopupMenuButton( + key="popup", items=[ ft.PopupMenuItem(content="Item 1"), ft.PopupMenuItem(icon=ft.Icons.POWER_INPUT, content="Check power"), @@ -26,9 +27,10 @@ def handle_check_item_click(e: ft.Event[ft.PopupMenuItem]): checked=False, on_click=handle_check_item_click, ), - ] + ], ) ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/progress_bar/__init__.py b/sdk/python/examples/controls/progress_bar/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/examples/controls/progress_bar/determinate_and_indeterminate.py b/sdk/python/examples/controls/progress_bar/determinate_and_indeterminate.py index f20a997048..62c2973ae5 100644 --- a/sdk/python/examples/controls/progress_bar/determinate_and_indeterminate.py +++ b/sdk/python/examples/controls/progress_bar/determinate_and_indeterminate.py @@ -28,4 +28,5 @@ async def main(page: ft.Page): page.update() -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/packages/flet/docs/controls/navigationdrawer/index.md b/sdk/python/packages/flet/docs/controls/navigationdrawer/index.md index 00cc9a2147..db2ce17308 100644 --- a/sdk/python/packages/flet/docs/controls/navigationdrawer/index.md +++ b/sdk/python/packages/flet/docs/controls/navigationdrawer/index.md @@ -1,12 +1,12 @@ --- class_name: flet.NavigationDrawer examples: ../../examples/controls/navigation_drawer -example_images: ../../examples/controls/navigation_drawer/media +example_images: ../../test-images/examples/material/golden/macos/navigation_drawer --- # NavigationDrawer -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Navigation drawer extended") }} ## Examples diff --git a/sdk/python/packages/flet/docs/controls/navigationrail/index.md b/sdk/python/packages/flet/docs/controls/navigationrail/index.md index ccd4cd94b8..5b4a8859db 100644 --- a/sdk/python/packages/flet/docs/controls/navigationrail/index.md +++ b/sdk/python/packages/flet/docs/controls/navigationrail/index.md @@ -1,12 +1,12 @@ --- class_name: flet.NavigationRail examples: ../../examples/controls/navigation_rail -example_images: ../../examples/controls/navigation_rail/media +example_images: ../../test-images/examples/material/golden/macos/navigation_rail --- # NavigationRail -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Navigation rail extended") }} ## Examples diff --git a/sdk/python/packages/flet/docs/controls/outlinedbutton.md b/sdk/python/packages/flet/docs/controls/outlinedbutton.md index b4150b9c15..e8b2e2004b 100644 --- a/sdk/python/packages/flet/docs/controls/outlinedbutton.md +++ b/sdk/python/packages/flet/docs/controls/outlinedbutton.md @@ -1,10 +1,11 @@ --- class_name: flet.OutlinedButton examples: ../../examples/controls/outlined_button -example_images: ../examples/controls/outlined_button/media +example_media: ../examples/controls/outlined_button/media +example_images: ../test-images/examples/material/golden/macos/outlined_button --- -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Simple Outlined Button") }} ## Examples diff --git a/sdk/python/packages/flet/docs/controls/placeholder.md b/sdk/python/packages/flet/docs/controls/placeholder.md index 3f063312c6..123d737e39 100644 --- a/sdk/python/packages/flet/docs/controls/placeholder.md +++ b/sdk/python/packages/flet/docs/controls/placeholder.md @@ -1,10 +1,10 @@ --- class_name: flet.Placeholder examples: ../../examples/controls/placeholder -example_images: ../examples/controls/placeholder/media +example_images: ../test-images/examples/core/golden/macos/placeholder --- -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Placeholder") }} ## Examples diff --git a/sdk/python/packages/flet/docs/controls/popupmenubutton.md b/sdk/python/packages/flet/docs/controls/popupmenubutton.md index 52d5f99a7d..46fa8bf38d 100644 --- a/sdk/python/packages/flet/docs/controls/popupmenubutton.md +++ b/sdk/python/packages/flet/docs/controls/popupmenubutton.md @@ -1,11 +1,12 @@ --- class_name: flet.PopupMenuButton examples: ../../examples/controls/popup_menu_button -example_images: ../examples/controls/popup_menu_button/media +example_media: ../examples/controls/popup_menu_button/media +example_images: ../test-images/examples/material/golden/macos/popup_menu_button popup_menu_item_class_name: flet.PopupMenuItem --- -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Opened popup menu under button") }} ## Examples @@ -17,7 +18,7 @@ popup_menu_item_class_name: flet.PopupMenuItem --8<-- "{{ examples }}/basic.py" ``` -{{ image(example_images + "/basic.gif", alt="basic", width="80%") }} +{{ image(example_media + "/basic.gif", alt="basic", width="80%") }} {{ class_members(class_name) }} diff --git a/sdk/python/packages/flet/docs/controls/progressbar.md b/sdk/python/packages/flet/docs/controls/progressbar.md index 96e19f08e5..f81b7e6c2f 100644 --- a/sdk/python/packages/flet/docs/controls/progressbar.md +++ b/sdk/python/packages/flet/docs/controls/progressbar.md @@ -1,10 +1,11 @@ --- class_name: flet.ProgressBar examples: ../../examples/controls/progress_bar -example_images: ../examples/controls/progress_bar/media +example_media: ../examples/controls/progress_bar/media +example_images: ../test-images/examples/material/golden/macos/progress_bar --- -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Fixed progress bar") }} ## Examples @@ -16,7 +17,7 @@ example_images: ../examples/controls/progress_bar/media --8<-- "{{ examples }}/determinate_and_indeterminate.py" ``` -{{ image(example_images + "/determinate_and_indeterminate.gif", alt="determinate-and-indeterminate", width="80%") }} +{{ image(example_media + "/determinate_and_indeterminate.gif", alt="determinate-and-indeterminate", width="80%") }} {{ class_members(class_name) }} diff --git a/sdk/python/packages/flet/integration_tests/examples/core/golden/macos/placeholder/basic.png b/sdk/python/packages/flet/integration_tests/examples/core/golden/macos/placeholder/basic.png new file mode 100644 index 0000000000..0eef7a951c Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/core/golden/macos/placeholder/basic.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/core/golden/macos/placeholder/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/core/golden/macos/placeholder/image_for_docs.png new file mode 100644 index 0000000000..3ebb0198cd Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/core/golden/macos/placeholder/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/core/test_placeholder.py b/sdk/python/packages/flet/integration_tests/examples/core/test_placeholder.py new file mode 100644 index 0000000000..23cafc44ca --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/core/test_placeholder.py @@ -0,0 +1,37 @@ +import pytest + +import flet as ft +import flet.testing as ftt + +from examples.controls.placeholder import basic + + +@pytest.mark.asyncio(loop_scope="function") +async def test_image_for_docs(flet_app_function: ftt.FletTestApp, request): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + await flet_app_function.assert_control_screenshot( + request.node.name, + ft.Placeholder( + expand=True, + color=ft.Colors.RED_500, + ), + ) + + +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": basic.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_basic(flet_app_function: ftt.FletTestApp): + flet_app_function.page.enable_screenshots = True + flet_app_function.resize_page(200, 200) + flet_app_function.page.update() + await flet_app_function.tester.pump_and_settle() + flet_app_function.assert_screenshot( + "basic", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/image_for_docs.png new file mode 100644 index 0000000000..31545f1129 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end.gif b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end.gif new file mode 100644 index 0000000000..66d7b7344d Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end.gif differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end1.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end1.png new file mode 100644 index 0000000000..e70b19d4c0 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end1.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end2.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end2.png new file mode 100644 index 0000000000..91ceb330cf Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end2.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end3.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end3.png new file mode 100644 index 0000000000..81affa8cd4 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_end3.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start.gif b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start.gif new file mode 100644 index 0000000000..099122643e Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start.gif differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start1.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start1.png new file mode 100644 index 0000000000..981e1f386a Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start1.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start2.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start2.png new file mode 100644 index 0000000000..1e23363e1c Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start2.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start3.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start3.png new file mode 100644 index 0000000000..ed9ba3e7c3 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_drawer/position_start3.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_rail/basic.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_rail/basic.png new file mode 100644 index 0000000000..237e0deede Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_rail/basic.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_rail/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_rail/image_for_docs.png new file mode 100644 index 0000000000..b85e1a8982 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_rail/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/basic.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/basic.png new file mode 100644 index 0000000000..83201165cc Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/basic.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/custom_content.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/custom_content.png new file mode 100644 index 0000000000..f9ecde96ca Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/custom_content.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks.gif b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks.gif new file mode 100644 index 0000000000..4f43d4defa Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks.gif differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks1.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks1.png new file mode 100644 index 0000000000..e2f28515ec Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks1.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks2.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks2.png new file mode 100644 index 0000000000..ba1059ac9d Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks2.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks3.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks3.png new file mode 100644 index 0000000000..c616bad82c Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/handling_clicks3.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/icons.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/icons.png new file mode 100644 index 0000000000..23474a2ad8 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/icons.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/image_for_docs.png new file mode 100644 index 0000000000..d288663b7f Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/outlined_button/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/popup_menu_button/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/popup_menu_button/image_for_docs.png new file mode 100644 index 0000000000..958432b0f3 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/popup_menu_button/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/progress_bar/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/progress_bar/image_for_docs.png new file mode 100644 index 0000000000..28ff753a35 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/progress_bar/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/test_navigation_drawer.py b/sdk/python/packages/flet/integration_tests/examples/material/test_navigation_drawer.py new file mode 100644 index 0000000000..8f2c06f02e --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/material/test_navigation_drawer.py @@ -0,0 +1,131 @@ +import pytest + +import flet as ft +import flet.testing as ftt + +from examples.controls.navigation_drawer import position_end, position_start + + +@pytest.mark.asyncio(loop_scope="function") +async def test_image_for_docs(flet_app_function: ftt.FletTestApp, request): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + flet_app_function.page.enable_screenshots = True + nvd = ft.NavigationDrawer( + controls=[ + ft.NavigationDrawerDestination(label="Item 1"), + ft.NavigationDrawerDestination(label="Item 2"), + ft.NavigationDrawerDestination(label="Item 3"), + ], + tile_padding=ft.Padding(top=10), + ) + flet_app_function.resize_page(400, 400) + flet_app_function.page.drawer = nvd + flet_app_function.page.update() + await flet_app_function.tester.pump_and_settle( + duration=ft.Duration(milliseconds=800) + ) + await flet_app_function.page.show_drawer() + flet_app_function.page.update() + await flet_app_function.tester.pump_and_settle( + duration=ft.Duration(milliseconds=800) + ) + flet_app_function.assert_screenshot( + "image_for_docs", + await flet_app_function.page.take_screenshot(), + ) + + +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": position_end.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_position_end(flet_app_function: ftt.FletTestApp): + flet_app_function.page.enable_screenshots = True + flet_app_function.resize_page(400, 400) + flet_app_function.page.update() + await flet_app_function.tester.pump_and_settle( + duration=ft.Duration(milliseconds=500) + ) + flet_app_function.assert_screenshot( + "position_end1", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + btn = await flet_app_function.tester.find_by_text_containing("Show") + await flet_app_function.tester.mouse_hover(btn) + await flet_app_function.tester.pump_and_settle( + duration=ft.Duration(milliseconds=500) + ) + flet_app_function.assert_screenshot( + "position_end2", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + await flet_app_function.tester.tap(btn) + await flet_app_function.tester.pump_and_settle( + duration=ft.Duration(milliseconds=500) + ) + flet_app_function.assert_screenshot( + "position_end3", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + + flet_app_function.create_gif( + ["position_end1", "position_end2", "position_end3"], + "position_end", + duration=1600, + ) + + +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": position_start.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_position_start(flet_app_function: ftt.FletTestApp): + flet_app_function.page.enable_screenshots = True + flet_app_function.resize_page(400, 400) + flet_app_function.page.update() + await flet_app_function.tester.pump_and_settle( + duration=ft.Duration(milliseconds=500) + ) + flet_app_function.assert_screenshot( + "position_start1", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + btn = await flet_app_function.tester.find_by_text_containing("Show") + await flet_app_function.tester.mouse_hover(btn) + await flet_app_function.tester.pump_and_settle( + duration=ft.Duration(milliseconds=500) + ) + flet_app_function.assert_screenshot( + "position_start2", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + await flet_app_function.tester.tap(btn) + await flet_app_function.tester.pump_and_settle( + duration=ft.Duration(milliseconds=500) + ) + flet_app_function.assert_screenshot( + "position_start3", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + + flet_app_function.create_gif( + ["position_start1", "position_start2", "position_start3"], + "position_start", + duration=1600, + ) diff --git a/sdk/python/packages/flet/integration_tests/examples/material/test_navigation_rail.py b/sdk/python/packages/flet/integration_tests/examples/material/test_navigation_rail.py new file mode 100644 index 0000000000..baa5b7213c --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/material/test_navigation_rail.py @@ -0,0 +1,51 @@ +import pytest + +import flet as ft +import flet.testing as ftt + +from examples.controls.navigation_rail import basic + + +@pytest.mark.asyncio(loop_scope="function") +async def test_image_for_docs(flet_app_function: ftt.FletTestApp, request): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + await flet_app_function.assert_control_screenshot( + request.node.name, + ft.NavigationRail( + selected_index=0, + destinations=[ + ft.NavigationRailDestination( + icon=ft.Icons.STAR, + label="Star", + ), + ft.NavigationRailDestination( + icon=ft.Icon(ft.Icons.ADD), + label="Add", + ), + ft.NavigationRailDestination( + icon=ft.Icons.DELETE, + label=ft.Text("Delete"), + ), + ], + height=200, + width=100, + ), + ) + + +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": basic.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_basic(flet_app_function: ftt.FletTestApp): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + flet_app_function.page.enable_screenshots = True + flet_app_function.resize_page(400, 300) + flet_app_function.page.update() + await flet_app_function.tester.pump_and_settle() + flet_app_function.assert_screenshot( + "basic", + await flet_app_function.page.take_screenshot(), + ) diff --git a/sdk/python/packages/flet/integration_tests/examples/material/test_outlined_button.py b/sdk/python/packages/flet/integration_tests/examples/material/test_outlined_button.py new file mode 100644 index 0000000000..14a94d6054 --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/material/test_outlined_button.py @@ -0,0 +1,99 @@ +import pytest + +import flet as ft +import flet.testing as ftt + +from examples.controls.outlined_button import ( + basic, + custom_content, + icons, + handling_clicks, +) + + +@pytest.mark.asyncio(loop_scope="function") +async def test_image_for_docs(flet_app_function: ftt.FletTestApp, request): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + await flet_app_function.assert_control_screenshot( + request.node.name, + ft.OutlinedButton(content="Outlined button"), + ) + + +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": basic.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_basic(flet_app_function: ftt.FletTestApp): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + flet_app_function.assert_screenshot( + "basic", + await flet_app_function.take_page_controls_screenshot(), + ) + + +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": custom_content.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_custom_content(flet_app_function: ftt.FletTestApp): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + flet_app_function.assert_screenshot( + "custom_content", + await flet_app_function.take_page_controls_screenshot(), + ) + + +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": icons.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_icons(flet_app_function: ftt.FletTestApp): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + flet_app_function.assert_screenshot( + "icons", + await flet_app_function.take_page_controls_screenshot(), + ) + + +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": handling_clicks.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_handling_clicks(flet_app_function: ftt.FletTestApp): + flet_app_function.page.enable_screenshots = True + flet_app_function.resize_page(300, 150) + flet_app_function.page.update() + ob = await flet_app_function.tester.find_by_text_containing("event") + await flet_app_function.tester.tap(ob) + await flet_app_function.tester.pump_and_settle() + flet_app_function.assert_screenshot( + "handling_clicks1", + await flet_app_function.page.take_screenshot(), + ) + await flet_app_function.tester.tap(ob) + await flet_app_function.tester.pump_and_settle() + flet_app_function.assert_screenshot( + "handling_clicks2", + await flet_app_function.page.take_screenshot(), + ) + await flet_app_function.tester.tap(ob) + await flet_app_function.tester.pump_and_settle() + flet_app_function.assert_screenshot( + "handling_clicks3", + await flet_app_function.page.take_screenshot(), + ) + + flet_app_function.create_gif( + ["handling_clicks1", "handling_clicks2", "handling_clicks3"], + "handling_clicks", + duration=1600, + ) diff --git a/sdk/python/packages/flet/integration_tests/examples/material/test_popup_menu_button.py b/sdk/python/packages/flet/integration_tests/examples/material/test_popup_menu_button.py new file mode 100644 index 0000000000..60e89c5ea4 --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/material/test_popup_menu_button.py @@ -0,0 +1,56 @@ +import pytest + +import flet as ft +import flet.testing as ftt + +from examples.controls.popup_menu_button import basic + + +@pytest.mark.asyncio(loop_scope="function") +async def test_image_for_docs(flet_app_function: ftt.FletTestApp, request): + flet_app_function.page.enable_screenshots = True + flet_app_function.resize_page(100, 200) + flet_app_function.page.update() + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + flet_app_function.page.add( + pmb := ft.PopupMenuButton( + key="popup", + items=[ + ft.PopupMenuItem(content="Sm"), + ft.PopupMenuItem(content="Med"), + ft.PopupMenuItem(content="Lg"), + ], + menu_position=ft.PopupMenuPosition.UNDER, + ) + ) + flet_app_function.page.update() + await flet_app_function.tester.pump_and_settle() + pb = await flet_app_function.tester.find_by_key("popup") + await flet_app_function.tester.tap(pb) + await flet_app_function.tester.pump_and_settle() + flet_app_function.page.update() + flet_app_function.assert_screenshot( + request.node.name, + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio, + ), + ) + + +@pytest.mark.skip(reason="Test runs asynchronously") +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": basic.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_basic(flet_app_function: ftt.FletTestApp): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + flet_app_function.page.enable_screenshots = True + pb = await flet_app_function.tester.find_by_key("popup") + await flet_app_function.tester.tap(pb) + await flet_app_function.tester.pump_and_settle() + flet_app_function.assert_screenshot( + "basic", + await flet_app_function.page.take_screenshot(delay=ft.Duration(seconds=15)), + ) diff --git a/sdk/python/packages/flet/integration_tests/examples/material/test_progress_bar.py b/sdk/python/packages/flet/integration_tests/examples/material/test_progress_bar.py new file mode 100644 index 0000000000..a66542ddad --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/material/test_progress_bar.py @@ -0,0 +1,32 @@ +import pytest + +import flet as ft +import flet.testing as ftt + +from examples.controls.progress_ring import determinate_and_indeterminate + + +@pytest.mark.asyncio(loop_scope="function") +async def test_image_for_docs(flet_app_function: ftt.FletTestApp, request): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + await flet_app_function.assert_control_screenshot( + request.node.name, + ft.ProgressBar(width=400, value=0.8), + ) + + +@pytest.mark.skip(reason="Test runs asynchronously") +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": determinate_and_indeterminate.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_determinate_and_indeterminate(flet_app_function: ftt.FletTestApp): + flet_app_function.page.theme_mode = ft.ThemeMode.LIGHT + flet_app_function.page.enable_screenshots = True + flet_app_function.page.update() + flet_app_function.assert_screenshot( + "determinate_and_indeterminate", + await flet_app_function.page.take_screenshot(delay=ft.Duration(seconds=15)), + ) diff --git a/sdk/python/packages/flet/src/flet/controls/core/placeholder.py b/sdk/python/packages/flet/src/flet/controls/core/placeholder.py index 538fcc25b4..609ce0be84 100644 --- a/sdk/python/packages/flet/src/flet/controls/core/placeholder.py +++ b/sdk/python/packages/flet/src/flet/controls/core/placeholder.py @@ -13,6 +13,14 @@ class Placeholder(LayoutControl): """ A placeholder box. + + ```python + ft.Placeholder( + expand=True, + color=ft.Colors.RED_500, + ) + ``` + """ content: Optional[Control] = None diff --git a/sdk/python/packages/flet/src/flet/controls/material/navigation_drawer.py b/sdk/python/packages/flet/src/flet/controls/material/navigation_drawer.py index 19b4b3b212..7c381db7d0 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/navigation_drawer.py +++ b/sdk/python/packages/flet/src/flet/controls/material/navigation_drawer.py @@ -79,6 +79,18 @@ class NavigationDrawer(AdaptiveControl): Navigation Drawer is a panel slides in horizontally from the left or right edge of a page to show primary destinations in an app. + + ```python + ft.NavigationDrawer( + controls=[ + ft.NavigationDrawerDestination(label="Item 1"), + ft.NavigationDrawerDestination(label="Item 2"), + ft.NavigationDrawerDestination(label="Item 3"), + ], + tile_padding=ft.Padding(top=10), + ) + ``` + """ controls: list[Control] = field(default_factory=list) diff --git a/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py b/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py index b54e216299..b9295eacd7 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py +++ b/sdk/python/packages/flet/src/flet/controls/material/navigation_rail.py @@ -81,6 +81,20 @@ class NavigationRail(LayoutControl): """ A material widget that is meant to be displayed at the left or right of an app to navigate between a small number of views, typically between three and five. + + ```python + ft.NavigationRail( + selected_index=0, + destinations=[ + ft.NavigationRailDestination(icon=ft.Icons.STAR, label="Star"), + ft.NavigationRailDestination(icon=ft.Icon(ft.Icons.ADD),label="Add"), + ft.NavigationRailDestination(icon=ft.Icons.DELETE, label=ft.Text("Delete") + ], + height=200, + width=100, + ) + ``` + """ destinations: list[NavigationRailDestination] = field(default_factory=list) diff --git a/sdk/python/packages/flet/src/flet/controls/material/outlined_button.py b/sdk/python/packages/flet/src/flet/controls/material/outlined_button.py index c56ac11d0e..6e46215bd8 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/outlined_button.py +++ b/sdk/python/packages/flet/src/flet/controls/material/outlined_button.py @@ -23,6 +23,11 @@ class OutlinedButton(LayoutControl, AdaptiveControl): Outlined buttons are medium-emphasis buttons. They contain actions that are important, but aren't the primary action in an app. Outlined buttons pair well with filled buttons to indicate an alternative, secondary action. + + ```python + ft.OutlinedButton(content="Outlined button") + ``` + """ content: Optional[StrOrControl] = None diff --git a/sdk/python/packages/flet/src/flet/controls/material/popup_menu_button.py b/sdk/python/packages/flet/src/flet/controls/material/popup_menu_button.py index 428f89d84d..d4b38a1073 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/popup_menu_button.py +++ b/sdk/python/packages/flet/src/flet/controls/material/popup_menu_button.py @@ -90,6 +90,18 @@ class PopupMenuItem(Control): class PopupMenuButton(LayoutControl): """ An icon button which displays a menu when clicked. + + ```python + ft.PopupMenuButton( + items=[ + ft.PopupMenuItem(content="Sm"), + ft.PopupMenuItem(content="Med"), + ft.PopupMenuItem(content="Lg"), + ], + menu_position=ft.PopupMenuPosition.UNDER, + ) + ``` + """ content: Optional[StrOrControl] = None diff --git a/sdk/python/packages/flet/src/flet/controls/material/progress_bar.py b/sdk/python/packages/flet/src/flet/controls/material/progress_bar.py index b88465d6de..04f3b19dfe 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/progress_bar.py +++ b/sdk/python/packages/flet/src/flet/controls/material/progress_bar.py @@ -14,6 +14,11 @@ class ProgressBar(LayoutControl): A material design linear progress indicator, also known as a progress bar. A control that shows progress along a line. + + ```python + ft.ProgressBar(width=400, value=0.8), + ``` + """ value: Optional[Number] = None