feat: implement adaptive layout and sync navigation state

This commit is contained in:
Flook
2026-05-07 04:59:47 +07:00
parent 2d9cbb3376
commit 5ac9799b5d
3 changed files with 57 additions and 25 deletions
+23 -1
View File
@@ -9,8 +9,11 @@ from app.pages.my_courses import my_courses_page
from app.pages.progress import progress_page
from app.pages.profile import profile_page
from app.state import state
from app.widgets.adaptive_menu import get_selected_index_from_route
async def main(page: ft.Page):
page.title = "LMS Frontend"
# register font
@@ -23,7 +26,7 @@ async def main(page: ft.Page):
page.theme = ft.Theme(font_family="NotoSansThai")
# GLOBAL CONTAINER (รองรับ Persistent Layout + Dynamic Content)
main_container = ft.Container(expand=True)
main_container = ft.Container(expand=True, padding=10)
# ROUTES MAP
routes = {
@@ -88,6 +91,10 @@ async def main(page: ft.Page):
else:
main_container.content = ft.Text("404 NOT FOUND")
# หลังจาก set main_container.content แล้ว ให้อับเดตเมนูที่เลือก รองรับกรณี Back/Forward
if hasattr(page, "_menu_control"):
page._menu_control.selected_index = get_selected_index_from_route(page.route)
page.update()
# LOGIN SUCCESS
@@ -97,6 +104,21 @@ async def main(page: ft.Page):
page.on_route_change = route_change
def on_resize(e):
width = page.width if page.width and page.width > 0 else 1024
new_mode = "mobile" if width < 600 else "desktop"
if getattr(page, "_layout_mode", None) == new_mode:
return
print(f">>> Layout mode changed: {page._layout_mode} -> {new_mode}")
if page.views and page.views[-1].route == "/main":
page.views[-1].controls[0] = main_layout(page, main_container)
page.update()
page.on_resize = on_resize
# start app
await page.push_route("/login")