diff --git a/sdk/python/examples/controls/cupertino_timer_picker/__init__.py b/sdk/python/examples/controls/cupertino_timer_picker/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/examples/controls/cupertino_timer_picker/basic.py b/sdk/python/examples/controls/cupertino_timer_picker/basic.py index 80d00ad254..fe522e926b 100644 --- a/sdk/python/examples/controls/cupertino_timer_picker/basic.py +++ b/sdk/python/examples/controls/cupertino_timer_picker/basic.py @@ -44,4 +44,5 @@ def handle_timer_picker_change(e: ft.Event[ft.CupertinoTimerPicker]): ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/menu_bar/__init__.py b/sdk/python/examples/controls/menu_bar/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/examples/controls/menu_bar/nested_submenus.py b/sdk/python/examples/controls/menu_bar/nested_submenus.py index 94070dd5e7..c52c0ebc1b 100644 --- a/sdk/python/examples/controls/menu_bar/nested_submenus.py +++ b/sdk/python/examples/controls/menu_bar/nested_submenus.py @@ -119,4 +119,5 @@ def handle_submenu_hover(e: ft.Event[ft.SubmenuButton]): ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/menu_item_button/__init__.py b/sdk/python/examples/controls/menu_item_button/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/examples/controls/menu_item_button/basic.py b/sdk/python/examples/controls/menu_item_button/basic.py index dcb9839195..4b15491094 100644 --- a/sdk/python/examples/controls/menu_item_button/basic.py +++ b/sdk/python/examples/controls/menu_item_button/basic.py @@ -67,4 +67,5 @@ def handle_on_hover(e: ft.Event[ft.MenuItemButton]): ) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/examples/controls/navigation_bar/__init__.py b/sdk/python/examples/controls/navigation_bar/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/examples/controls/navigation_bar/basic.py b/sdk/python/examples/controls/navigation_bar/basic.py index 7d613ddc15..2e0b3c844e 100644 --- a/sdk/python/examples/controls/navigation_bar/basic.py +++ b/sdk/python/examples/controls/navigation_bar/basic.py @@ -19,4 +19,5 @@ def main(page: ft.Page): page.add(ft.Text("Body!")) -ft.run(main) +if __name__ == "__main__": + ft.run(main) diff --git a/sdk/python/packages/flet/docs/controls/cupertinotimerpicker.md b/sdk/python/packages/flet/docs/controls/cupertinotimerpicker.md index 93caf951c6..bc470e8ea0 100644 --- a/sdk/python/packages/flet/docs/controls/cupertinotimerpicker.md +++ b/sdk/python/packages/flet/docs/controls/cupertinotimerpicker.md @@ -1,10 +1,11 @@ --- class_name: flet.CupertinoTimerPicker examples: ../../examples/controls/cupertino_timer_picker -example_images: ../examples/controls/cupertino_timer_picker/media +example_media: ../examples/controls/cupertino_timer_picker/media +example_images: ../test-images/examples/cupertino/golden/macos/cupertino_timer_picker --- -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Simple Cupertino timer picker") }} ## Examples @@ -16,7 +17,7 @@ example_images: ../examples/controls/cupertino_timer_picker/media --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/listview.md b/sdk/python/packages/flet/docs/controls/listview.md index 4682fea2d0..4a7146e4e9 100644 --- a/sdk/python/packages/flet/docs/controls/listview.md +++ b/sdk/python/packages/flet/docs/controls/listview.md @@ -1,10 +1,11 @@ --- class_name: flet.ListView examples: ../../examples/controls/list_view -example_images: ../examples/controls/list_view/media +example_media: ../examples/controls/list_view/media +example_images: ../test-images/examples/core/golden/macos/list_view --- -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Basic list view") }} ## Examples @@ -16,7 +17,7 @@ example_images: ../examples/controls/list_view/media --8<-- "{{ examples }}/autoscroll_and_dynamic_items.py" ``` -{{ image(example_images + "/autoscroll_and_dynamic_items.gif", alt="autoscroll-and-dynamic-items", width="80%") }} +{{ image(example_media + "/autoscroll_and_dynamic_items.gif", alt="autoscroll-and-dynamic-items", width="80%") }} {{ class_members(class_name) }} diff --git a/sdk/python/packages/flet/docs/controls/menubar.md b/sdk/python/packages/flet/docs/controls/menubar.md index 6d93acfe65..6349b91155 100644 --- a/sdk/python/packages/flet/docs/controls/menubar.md +++ b/sdk/python/packages/flet/docs/controls/menubar.md @@ -1,10 +1,10 @@ --- class_name: flet.MenuBar examples: ../../examples/controls/menu_bar -example_images: ../examples/controls/menu_bar/media +example_images: ../test-images/examples/material/golden/macos/menu_bar --- -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Basic menu bar") }} ## Examples diff --git a/sdk/python/packages/flet/docs/controls/menuitembutton.md b/sdk/python/packages/flet/docs/controls/menuitembutton.md index 332c0896f2..02d8e61783 100644 --- a/sdk/python/packages/flet/docs/controls/menuitembutton.md +++ b/sdk/python/packages/flet/docs/controls/menuitembutton.md @@ -1,10 +1,10 @@ --- class_name: flet.MenuItemButton examples: ../../examples/controls/menu_item_button -example_images: ../examples/controls/menu_item_button/media +example_images: ../test-images/examples/material/golden/macos/menu_item_button --- -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Menu item buttons outside of menubar") }} ## Examples diff --git a/sdk/python/packages/flet/docs/controls/navigationbar/index.md b/sdk/python/packages/flet/docs/controls/navigationbar/index.md index f7d7d09a1e..e1ee7317a4 100644 --- a/sdk/python/packages/flet/docs/controls/navigationbar/index.md +++ b/sdk/python/packages/flet/docs/controls/navigationbar/index.md @@ -1,12 +1,12 @@ --- class_name: flet.NavigationBar examples: ../../examples/controls/navigation_bar -example_images: ../../examples/controls/navigation_bar/media +example_images: ../../test-images/examples/material/golden/macos/navigation_bar --- # NavigationBar -{{ class_summary(class_name) }} +{{ class_summary(class_name, example_images + "/image_for_docs.png", image_caption="Simple navigation bar") }} ## Examples @@ -18,7 +18,7 @@ example_images: ../../examples/controls/navigation_bar/media --8<-- "{{ examples }}/basic.py" ``` -{{ image(example_images + "/basic.gif", alt="basic", width="80%") }} +{{ image(example_images + "/basic.png", alt="basic", width="80%") }} {{ class_members(class_name) }} diff --git a/sdk/python/packages/flet/integration_tests/examples/core/golden/macos/list_view/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/core/golden/macos/list_view/image_for_docs.png new file mode 100644 index 0000000000..9e03eecd39 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/core/golden/macos/list_view/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/core/test_list_view.py b/sdk/python/packages/flet/integration_tests/examples/core/test_list_view.py new file mode 100644 index 0000000000..bbb56695c3 --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/core/test_list_view.py @@ -0,0 +1,18 @@ +import pytest + +import flet as ft +import flet.testing as ftt + + +@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.resize_page(100, 300) + flet_app_function.page.update() + await flet_app_function.assert_control_screenshot( + request.node.name, + ft.ListView( + controls=[ft.Text(f"Item {i}") for i in range(1, 6)], + divider_thickness=1, + ), + ) diff --git a/sdk/python/packages/flet/integration_tests/examples/cupertino/golden/macos/cupertino_timer_picker/basic.png b/sdk/python/packages/flet/integration_tests/examples/cupertino/golden/macos/cupertino_timer_picker/basic.png new file mode 100644 index 0000000000..c8578685c6 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/cupertino/golden/macos/cupertino_timer_picker/basic.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/cupertino/golden/macos/cupertino_timer_picker/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/cupertino/golden/macos/cupertino_timer_picker/image_for_docs.png new file mode 100644 index 0000000000..ef9f2c288e Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/cupertino/golden/macos/cupertino_timer_picker/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/cupertino/test_cupertino_timer_picker.py b/sdk/python/packages/flet/integration_tests/examples/cupertino/test_cupertino_timer_picker.py new file mode 100644 index 0000000000..1ac1e41e89 --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/cupertino/test_cupertino_timer_picker.py @@ -0,0 +1,39 @@ +import pytest + +import flet as ft +import flet.testing as ftt + +from examples.controls.cupertino_timer_picker 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.CupertinoTimerPicker(value=1000), + ) + + +@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(400, 400) + flet_app_function.page.update() + await flet_app_function.tester.pump_and_settle() + + btn = await flet_app_function.tester.find_by_text("00:01:10") + await flet_app_function.tester.tap(btn) + 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/badge/badge-navigation-bar.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/badge/badge-navigation-bar.png index aecbf187d5..2e46abef29 100644 Binary files a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/badge/badge-navigation-bar.png and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/badge/badge-navigation-bar.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/image_for_docs.png new file mode 100644 index 0000000000..69d40d4f0e Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus.gif b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus.gif new file mode 100644 index 0000000000..512d8a2ca6 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus.gif differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus1.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus1.png new file mode 100644 index 0000000000..d2285850af Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus1.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus2.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus2.png new file mode 100644 index 0000000000..75a68f50ac Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus2.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus3.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus3.png new file mode 100644 index 0000000000..b683da87d4 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_bar/nested_submenus3.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic.gif b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic.gif new file mode 100644 index 0000000000..f3a292bfe2 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic.gif differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic1.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic1.png new file mode 100644 index 0000000000..da4e139927 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic1.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic2.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic2.png new file mode 100644 index 0000000000..b368f923a2 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic2.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic3.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic3.png new file mode 100644 index 0000000000..051624188e Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/basic3.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/image_for_docs.png new file mode 100644 index 0000000000..4efe5672bd Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/menu_item_button/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_bar/basic.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_bar/basic.png new file mode 100644 index 0000000000..9ae32ca16a Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_bar/basic.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_bar/image_for_docs.png b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_bar/image_for_docs.png new file mode 100644 index 0000000000..ea1f377cc6 Binary files /dev/null and b/sdk/python/packages/flet/integration_tests/examples/material/golden/macos/navigation_bar/image_for_docs.png differ diff --git a/sdk/python/packages/flet/integration_tests/examples/material/test_menu_bar.py b/sdk/python/packages/flet/integration_tests/examples/material/test_menu_bar.py new file mode 100644 index 0000000000..3e8478097b --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/material/test_menu_bar.py @@ -0,0 +1,84 @@ +import pytest + +import flet as ft +import flet.testing as ftt + +from examples.controls.menu_bar import nested_submenus + + +@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 + flet_app_function.resize_page(150, 200) + flet_app_function.page.update() + mb = ft.MenuBar( + controls=[ + ft.SubmenuButton( + content=ft.Text("Submenu"), + controls=[ + ft.MenuItemButton(content=ft.Text("Item 1")), + ft.MenuItemButton(content=ft.Text("Item 2")), + ft.MenuItemButton(content=ft.Text("Item 3")), + ], + ), + ], + ) + flet_app_function.page.add(mb) + flet_app_function.page.update() + await flet_app_function.tester.pump_and_settle() + btn = await flet_app_function.tester.find_by_text("Submenu") + await flet_app_function.tester.tap(btn) + await flet_app_function.tester.pump_and_settle() + + flet_app_function.assert_screenshot( + "image_for_docs", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + + +@pytest.mark.parametrize( + "flet_app_function", + [{"flet_app_main": nested_submenus.main}], + indirect=True, +) +@pytest.mark.asyncio(loop_scope="function") +async def test_nested_submenus(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( + "nested_submenus1", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + smb = await flet_app_function.tester.find_by_text("File") + await flet_app_function.tester.tap(smb) + await flet_app_function.tester.pump_and_settle() + flet_app_function.assert_screenshot( + "nested_submenus2", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + mib = await flet_app_function.tester.find_by_text("Save") + await flet_app_function.tester.tap(mib) + await flet_app_function.tester.pump_and_settle() + flet_app_function.assert_screenshot( + "nested_submenus3", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + + flet_app_function.create_gif( + ["nested_submenus1", "nested_submenus2", "nested_submenus3"], + "nested_submenus", + duration=1600, + ) diff --git a/sdk/python/packages/flet/integration_tests/examples/material/test_menu_item_button.py b/sdk/python/packages/flet/integration_tests/examples/material/test_menu_item_button.py new file mode 100644 index 0000000000..3dd5a18140 --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/material/test_menu_item_button.py @@ -0,0 +1,80 @@ +import pytest + +import flet as ft +import flet.testing as ftt + +from examples.controls.menu_item_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.theme_mode = ft.ThemeMode.LIGHT + await flet_app_function.assert_control_screenshot( + request.node.name, + ft.Row( + controls=[ + ft.MenuItemButton( + content=ft.Text("Yes"), + on_click=lambda e: print("yes"), + autofocus=True, + ), + ft.MenuItemButton( + content=ft.Text("No"), + on_click=lambda e: print("no"), + ), + ft.MenuItemButton( + content=ft.Text("Maybe"), + on_click=lambda e: print("maybe"), + ), + ], + alignment=ft.MainAxisAlignment.CENTER, + height=50, + width=200, + expand=True, + ), + ) + + +@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(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( + "basic1", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + btn = await flet_app_function.tester.find_by_text("BgColors") + await flet_app_function.tester.tap(btn) + await flet_app_function.tester.pump_and_settle() + flet_app_function.assert_screenshot( + "basic2", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + mib = await flet_app_function.tester.find_by_text("Green") + await flet_app_function.tester.tap(mib) + await flet_app_function.tester.pump_and_settle() + flet_app_function.assert_screenshot( + "basic3", + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + + flet_app_function.create_gif( + ["basic1", "basic2", "basic3"], + "basic", + duration=1600, + ) diff --git a/sdk/python/packages/flet/integration_tests/examples/material/test_navigation_bar.py b/sdk/python/packages/flet/integration_tests/examples/material/test_navigation_bar.py new file mode 100644 index 0000000000..bc8f5bf84e --- /dev/null +++ b/sdk/python/packages/flet/integration_tests/examples/material/test_navigation_bar.py @@ -0,0 +1,51 @@ +import pytest + +import flet as ft +import flet.testing as ftt + +from examples.controls.navigation_bar 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 + flet_app_function.page.enable_screenshots = True + nvb = ft.NavigationBar( + destinations=[ + ft.NavigationBarDestination(icon=ft.Icons.CIRCLE, label="Item 1"), + ft.NavigationBarDestination(icon=ft.Icons.SQUARE, label="Item 2"), + ft.NavigationBarDestination(icon=ft.Icons.HEXAGON, label="Item 3"), + ], + ) + flet_app_function.resize_page(300, 100) + flet_app_function.page.navigation_bar = nvb + 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( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) + + +@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(300, 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( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), + ) 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 index 8f2c06f02e..16b37422f5 100644 --- 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 @@ -31,7 +31,9 @@ async def test_image_for_docs(flet_app_function: ftt.FletTestApp, request): ) flet_app_function.assert_screenshot( "image_for_docs", - await flet_app_function.page.take_screenshot(), + 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/test_navigation_rail.py b/sdk/python/packages/flet/integration_tests/examples/material/test_navigation_rail.py index baa5b7213c..4c7c7933e1 100644 --- 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 @@ -47,5 +47,7 @@ async def test_basic(flet_app_function: ftt.FletTestApp): await flet_app_function.tester.pump_and_settle() flet_app_function.assert_screenshot( "basic", - await flet_app_function.page.take_screenshot(), + 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/test_outlined_button.py b/sdk/python/packages/flet/integration_tests/examples/material/test_outlined_button.py index 14a94d6054..f1258906e1 100644 --- 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 @@ -77,19 +77,25 @@ async def test_handling_clicks(flet_app_function: ftt.FletTestApp): 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.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), ) 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.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), ) 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(), + await flet_app_function.page.take_screenshot( + pixel_ratio=flet_app_function.screenshots_pixel_ratio + ), ) flet_app_function.create_gif( diff --git a/sdk/python/packages/flet/src/flet/controls/core/list_view.py b/sdk/python/packages/flet/src/flet/controls/core/list_view.py index 3edd65ac1e..a2b6dd87e4 100644 --- a/sdk/python/packages/flet/src/flet/controls/core/list_view.py +++ b/sdk/python/packages/flet/src/flet/controls/core/list_view.py @@ -20,6 +20,13 @@ class ListView(LayoutControl, ScrollableControl, AdaptiveControl): ListView is the most commonly used scrolling control. It displays its children one after another in the scroll direction. In the cross axis, the children are required to fill the ListView. + + ```python + ft.ListView( + controls=[ft.Text(f"Item {i}") for i in range(1, 6)], + ) + ``` + """ controls: list[Control] = field(default_factory=list) diff --git a/sdk/python/packages/flet/src/flet/controls/cupertino/cupertino_timer_picker.py b/sdk/python/packages/flet/src/flet/controls/cupertino/cupertino_timer_picker.py index 9e7188e535..dd981e0423 100644 --- a/sdk/python/packages/flet/src/flet/controls/cupertino/cupertino_timer_picker.py +++ b/sdk/python/packages/flet/src/flet/controls/cupertino/cupertino_timer_picker.py @@ -25,6 +25,11 @@ class CupertinoTimerPicker(LayoutControl): It can show a countdown duration with hour, minute and second spinners. The duration is bound between `0` and `23` hours `59` minutes `59` seconds. + + ```python + ft.CupertinoTimerPicker(value=1000) + ``` + """ value: DurationValue = field(default_factory=lambda: Duration()) diff --git a/sdk/python/packages/flet/src/flet/controls/material/menu_bar.py b/sdk/python/packages/flet/src/flet/controls/material/menu_bar.py index 06aaf51f22..32eceb465f 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/menu_bar.py +++ b/sdk/python/packages/flet/src/flet/controls/material/menu_bar.py @@ -44,6 +44,22 @@ class MenuBar(Control): It could be placed anywhere but typically resides above the main body of the application and defines a menu system for invoking callbacks in response to user selection of a menu item. + + ```python + ft.MenuBar( + controls=[ + ft.SubmenuButton( + content=ft.Text("Submenu"), + controls=[ + ft.MenuItemButton(content=ft.Text("Item 1")), + ft.MenuItemButton(content=ft.Text("Item 2")), + ft.MenuItemButton(content=ft.Text("Item 3")), + ], + ), + ], + ) + ``` + """ controls: list[Control] = field(default_factory=list) diff --git a/sdk/python/packages/flet/src/flet/controls/material/menu_item_button.py b/sdk/python/packages/flet/src/flet/controls/material/menu_item_button.py index e28a7c42a6..1676e46d39 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/menu_item_button.py +++ b/sdk/python/packages/flet/src/flet/controls/material/menu_item_button.py @@ -16,6 +16,26 @@ class MenuItemButton(LayoutControl): """ A button for use in a MenuBar or on its own, that can be activated by click or keyboard navigation. + + ```python + ft.Row( + controls=[ + ft.MenuItemButton( + content=ft.Text("Yes"), + on_click=lambda e: print("yes"), + ), + ft.MenuItemButton( + content=ft.Text("No"), + on_click=lambda e: print("no"), + ), + ft.MenuItemButton( + content=ft.Text("Maybe"), + on_click=lambda e: print("maybe"), + ), + ], + ) + ``` + """ content: Optional[StrOrControl] = None diff --git a/sdk/python/packages/flet/src/flet/controls/material/navigation_bar.py b/sdk/python/packages/flet/src/flet/controls/material/navigation_bar.py index 9be750cde0..c109514e38 100644 --- a/sdk/python/packages/flet/src/flet/controls/material/navigation_bar.py +++ b/sdk/python/packages/flet/src/flet/controls/material/navigation_bar.py @@ -97,6 +97,17 @@ class NavigationBar(LayoutControl, AdaptiveControl): Navigation bars offer a persistent and convenient way to switch between primary destinations in an app. + + ```python + ft.NavigationBar( + destinations=[ + ft.NavigationBarDestination(icon=ft.Icons.CIRCLE, label="Item 1"), + ft.NavigationBarDestination(icon=ft.Icons.SQUARE, label="Item 2"), + ft.NavigationBarDestination(icon=ft.Icons.HEXAGON, label="Item 3"), + ], + ) + ``` + """ destinations: list[NavigationBarDestination] = field(default_factory=list)