import flet as ft
def main(page: ft.Page):
page.title = "Routes Example"
def route_change(route):
page.views.clear()
page.views.append(
View(
"/",
[
ft.AppBar(title=ft.Text("Flet app"), bgcolor=ft.colors.SURFACE_VARIANT),
ft.ElevatedButton("Visit Store", on_click=lambda _: page.go("/store")),
],
)
)
if page.route == "/store":
page.views.append(# some code here )
page.update()
def view_pop(view):
page.views.pop()
top_view = page.views[-1]
page.go(top_view.route)
page.on_route_change = route_change
page.on_view_pop = view_pop
page.go(page.route)
ft.app(target=main, view=ft.WEB_BROWSER)
The code block above is from flet documentation
What I noticed:
When I pressed back in AppBar The page.go() method in view_pop()
calls route_change()
within page.views
is cleared then filled,
What I tried:
Instead of calling route_change()
I will just pop the last element from page.views
, update page.update()
and change the route by page.route = "/"
.
What I expected from this try:
I expected that when I pressed back in AppBar and pressing the ElevatedButton visit_store, the app will work but it did not and even it did not give me any feedback.
This is my final code block.
import flet as ft
def main(page: ft.Page):
page.title = "Routes Example"
def route_change(route):
if page.route == "/":
page.views.clear()
page.views.append(
View(... # main view "/")
)
if page.route == "/store":
page.views.append(
View( ... # store view)
)
page.update()
def view_pop(view):
page.views.pop() # pop the last object of page.views
page.update() # updating the page
page.route = "/" # changing the current route to "/" because now I'm in the first view with route of "/"
# the rest of code