Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Navigation Drawer Not Visible on Backward Navigation. #4894

Open
PNMugkesh opened this issue Feb 15, 2025 · 0 comments
Open

Navigation Drawer Not Visible on Backward Navigation. #4894

PNMugkesh opened this issue Feb 15, 2025 · 0 comments

Comments

@PNMugkesh
Copy link

Issue: Navigation Drawer Not Visible on Backward Navigation.

Description
I encountered an issue where the Navigation Drawer does not behave correctly when navigating backward using the system back button or programmatic navigation (view_pop function).

  • The drawer appears correctly when initially opened and works fine during forward navigation.
  • However, when the user navigates back using view_pop, the drawer remains visible unexpectedly.
  • Once the drawer is clicked, does not appear on the same page.
  • After navigating to another page (either forward or backward), the drawer reappears again.

`import flet as ft

def main(page: ft.Page):
page.title = "Lazy Loader with Back Navigation"
page.theme_mode = "light"

def handle_change(e):
    if e.control.selected_index == 0:
        page.go("/")
    elif e.control.selected_index == 1:
        page.go("/store")
    elif e.control.selected_index == 2:
        page.go("/about")

drawer = ft.NavigationDrawer(
    on_change=handle_change,
    controls=[
        ft.Container(height=12),
        ft.NavigationDrawerDestination(
            label="Item 1",
            icon=ft.Icons.DOOR_BACK_DOOR_OUTLINED,
            selected_icon=ft.Icon(ft.Icons.DOOR_BACK_DOOR),
        ),
        ft.Divider(thickness=2),
        ft.NavigationDrawerDestination(
            icon=ft.Icon(ft.Icons.MAIL_OUTLINED),
            label="Item 2",
            selected_icon=ft.Icons.MAIL,
        ),
        ft.NavigationDrawerDestination(
            icon=ft.Icon(ft.Icons.PHONE_OUTLINED),
            label="Item 3",
            selected_icon=ft.Icons.PHONE,
        ),
    ],
)

page.drawer = drawer

def open_drawer(e):
    if page.drawer:
        page.drawer.open = True
        page.update()  # Ensure the entire page updates

def route_change(route):

        if page.route == "/":
            page.views.clear()
            page.views.append(
                ft.View(
                    "/",
                    [
                        ft.AppBar(
                            title=ft.Text("Home", expand=True),
                            bgcolor=ft.Colors.SURFACE_CONTAINER_HIGHEST,
                            leading=ft.Row(
                                controls=[
                                    ft.IconButton(ft.icons.MENU, on_click=open_drawer)
                                ],
                                spacing=0
                            ),
                            automatically_imply_leading=False
                        ),
                        ft.Text("Welcome to Home Page"),
                    ],
                    drawer=drawer  # Ensure the drawer is available
                )
            )

        if page.route == "/store":
            page.views.append(
                ft.View(
                    "/store",
                    [
                        ft.AppBar(
                            title=ft.Text("Store", expand=True),
                            bgcolor=ft.Colors.SURFACE_CONTAINER_HIGHEST,
                            leading=ft.Row(
                                controls=[
                                    ft.IconButton(ft.icons.MENU, on_click=open_drawer),
                                    ft.IconButton(ft.icons.ARROW_BACK, on_click=view_pop)  # Fix applied here
                                ],
                                spacing=0
                            ),
                            automatically_imply_leading=False
                        ),
                        ft.Text("Welcome to Store Page"),
                        ft.ElevatedButton("Go About", on_click=lambda _: page.go("/about")),
                    ],
                    drawer=drawer  # Add the drawer
                )
            )

        if page.route == "/about":
            page.views.append(
                ft.View(
                    "/about",
                    [
                        ft.AppBar(
                            title=ft.Text("About", expand=True),
                            bgcolor=ft.Colors.SURFACE_CONTAINER_HIGHEST,
                            leading=ft.Row(
                                controls=[
                                    ft.IconButton(ft.icons.MENU, on_click=open_drawer),
                                    ft.IconButton(ft.icons.ARROW_BACK, on_click=view_pop)  # Fix applied here
                                ],
                                spacing=0
                            ),
                            automatically_imply_leading=False
                        ),
                        ft.Text("Welcome to About Page"),
                        ft.ElevatedButton("Go Store", on_click=lambda _: page.go("/store")),
                    ],
                    drawer=drawer  # Add the drawer
                )
            )

        page.update()
        print("PAGE VIEWS: --- ", page.views)

def view_pop(view):
    print("BEFORE LEN ", len(page.views))
    page.views.pop()
    top_view = page.views[-1]
    page.go(top_view.route)
    print("AFTER LEN ", len(page.views))

page.on_route_change = route_change
page.on_view_pop = view_pop
page.go(page.route)

ft.app(target=main)`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant