我正在为 Android 创建一个移动应用程序。该应用程序有许多页面和一个导航系统。但是,如果您转到某些页面并单击系统后退按钮,则您返回的不是上一页,而是返回到起始页。应用程序有自己的应用程序栏,可以正常工作,但如何使用 Android 系统后退按钮修复此问题? 我使用 Flet 框架在 Python 中编写代码。
将 flet 导入为 ft
从机队导入( 页, 容器, 排, 图标, 图标, 文本, 高架按钮, 看法, 应用栏, 图标按钮, 分频器, )
应用程序1类:
def main(page: Page):
page.title = "App1"
def route_change(route):
page.views.clear()
page.views.append(
View(
"/",
[
Text(value="Application", font_family="Calibri", size=54,),
Divider(color="blue", height=100),
ElevatedButton("Start", on_click=lambda _: page.go("/main_menu")),
],
bgcolor="blue",
horizontal_alignment="center",
padding=90
)
)
if page.route == "/main_menu":
page.views.append(
View(
"/main_menu",
[
AppBar(bgcolor="green"), on_click=lambda _: page.go("/")
Text(value="Example1", size=32, font_family="Open Sans", color="black",),
Divider(height=50, color="white"),
Row(
[
Container(Icon(name=icons.APPLE), on_click=lambda _: page.go("/section1"),padding=20),
Container(Icon(name=icons.MUSIC_NOTE), on_click=lambda _: page.go("/section2"),padding=20)
]
),
],
bgcolor="white"
)
)
if page.route == "/section1":
page.views.append(
View(
"/section1",
[
AppBar(leading=((IconButton(icon=icons.ARROW_BACK, on_click=lambda _: page.go("/main_menu"), icon_color="black"))),
bgcolor="green",),
Text("Section1")
],
)
)
if page.route == "/section2":
page.views.append(
View(
"/section2",
[
AppBar(leading=((IconButton(icon=icons.ARROW_BACK, on_click=lambda _: page.go("/main_menu"), icon_color="black"))),
bgcolor="green",),
Text("Section2")
],
)
)
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,)
`
只是不要清除route_change上的视图
def route_change(e: ft.RouteChangeEvent):
# page.views.clear()
views_handler(page)
page.update()
def view_pop(e: ft.ViewPopEvent):
page.views.pop()
top_view = page.views[-1]
page.go(top_view.route)
page.views.pop()
我建议在单独的文件中使用视图处理程序,例如:
import flet as ft
from flet import TemplateRoute
def views_handler(page):
troute = TemplateRoute(page.route)
if troute.match("/"):
if load_token(page):
page.views.append(
Home(page, troute.route)
)
else:
page.views.clear() # for clearing the views
page.views.append(
Home_external(page, troute.route)
)
elif troute.match("/login"):
page.views.append(
Login(page, troute.route)
)
elif troute.match("/forgotpassword"):
page.views.append(
ForgotPassword(page, troute.route)
)