From e8ec5fcad3974b4e98bf5a9bbe33fb510bfa0e11 Mon Sep 17 00:00:00 2001 From: SNW Date: Wed, 23 Sep 2026 20:25:29 +0000 Subject: [PATCH] Update tabs for current Flet API --- app/main.py | 18 ++++++++++++++---- app/screens/vpn.py | 12 ++++++++---- tests/test_ui_startup.py | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 tests/test_ui_startup.py diff --git a/app/main.py b/app/main.py index 985c099..4a51888 100644 --- a/app/main.py +++ b/app/main.py @@ -88,12 +88,22 @@ def main(page: ft.Page) -> None: actions=[ft.IconButton(ft.Icons.SETTINGS_OUTLINED, on_click=open_settings)], ) tabs = ft.Tabs( + content=ft.Column( + [ + ft.TabBar( + tabs=[ft.Tab(label="VPN"), ft.Tab(label="Белые списки")], + scrollable=False, + ), + ft.TabBarView( + controls=[vpn_screen, white_lists_screen], + expand=True, + ), + ], + expand=True, + ), + length=2, expand=True, selected_index=0, - tabs=[ - ft.Tab(text="VPN", content=vpn_screen), - ft.Tab(text="Белые списки", content=white_lists_screen), - ], on_change=tab_changed, ) page.add( diff --git a/app/screens/vpn.py b/app/screens/vpn.py index 7ae92c9..73cade4 100644 --- a/app/screens/vpn.py +++ b/app/screens/vpn.py @@ -106,11 +106,15 @@ def build_vpn_screen( content.controls = [ section_title("VPN", "Выберите стратегию и потяните слайдер вправо"), ft.Tabs( + content=ft.TabBar( + tabs=[ + ft.Tab(label="Основная", icon=ft.Icons.LIGHT_MODE), + ft.Tab(label="Усиленная", icon=ft.Icons.SHIELD), + ], + scrollable=False, + ), + length=2, selected_index=0 if controller.strategy is Strategy.BASIC else 1, - tabs=[ - ft.Tab(text="Основная", icon=ft.Icons.LIGHT_MODE), - ft.Tab(text="Усиленная", icon=ft.Icons.SHIELD), - ], on_change=strategy_changed, ), ft.SegmentedButton( diff --git a/tests/test_ui_startup.py b/tests/test_ui_startup.py new file mode 100644 index 0000000..b9d02d8 --- /dev/null +++ b/tests/test_ui_startup.py @@ -0,0 +1,32 @@ +import flet as ft + +from app.main import main + + +class FakePage: + platform = ft.PagePlatform.LINUX + + def add(self, *controls: ft.Control) -> None: + self.controls = controls + + def update(self) -> None: + pass + + def open(self, control: ft.Control) -> None: + pass + + def close(self, control: ft.Control) -> None: + pass + + def launch_url(self, url: str) -> None: + pass + + def run_task(self, handler) -> None: + pass + + +def test_ui_control_tree_builds_with_current_flet_api() -> None: + page = FakePage() + main(page) # type: ignore[arg-type] + assert len(page.controls) == 1 + assert isinstance(page.controls[0], ft.SafeArea)