在我的应用程序中,我使用routes
在页面之间导航。
这是我实现路线的方法:
在main.dart
文件中,我定义了这样的路由:
bool session = await isValidSession(); //queries database and validate session
if (session) {
_defaultHome = new HomePage();
}
final routes = {
'/login': (BuildContext context) => new LoginPage(),
'/home': (BuildContext context) => new HomePage(),
//several other pages
'/logout' : (BuildContext context) => new LogoutPage(),
};
我已经将该路由作为
runApp
方法的参数传递了:runApp(new MaterialApp(
title: 'My Application',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: _defaultHome,
routes: routes,
));
可通过抽屉菜单浏览页面。当用户将
Tap
放在菜单上时,此代码将执行并将客户带到相应页面。Navigator.of(context).pushNamed("/PAGE_NAME");
问题场景:
Home
页面的代码。Navigator.of(context).popAndPushNamed("/home");
根据 popAndPushNamed 方法的官方文档,
Pop the current route off the navigator that most tightly encloses the given context and push a named route in its place.
因此,根据我的理解,
popAndPushNamed
应该从上下文中删除login
页面,并将导航到home
页面。它不能按预期的方式工作,它导航到
home
页,但不会从上下文中删除login
页,因为按下后退按钮会返回登录页面(即使表单处于填充状态)。或者,如果我将当前上下文
pop
和push
链接到新页面,则使用,然后按预期运行。Navigator.pop(context);
Navigator.of(context).pushNamed("/home");
但是,当我从
back
页面上点击home
按钮时,这种方法仍然存在问题。屏幕变为空白,而不是退出应用程序。问题:
login
页面? (如果用户按下后退按钮,则应用程序退出)login
页面? (已经尝试过,但在我的情况下不起作用)Navigator.of(context).popUntil(ModalRoute.withName('/login'));
最佳答案
您可以尝试注销:
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (BuildContext context) => LoginPage()),
ModalRoute.withName('/'));
关于authentication - Flutter:应用生命周期之间的导航问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58114861/