Flutter Navigator.pushReplacementNamed 在页面显示后退按钮
Flutter Navigator.pushReplacementNamed show back button at the page
我在 flutter 应用程序中使用 Navigator.pushReplacementNamed
从登录页面导航到主页运行良好,但在我的主页中显示 appBar 的后退箭头按钮,按下它时 returns 到登录页面。我应该怎么办?我试过 leading: Text('')
,但是当按下物理后退按钮时,它仍然返回到登录页面。
我有一个注销按钮,我希望用户只能通过此按钮注销,而不是通过后退按钮注销
*这是我的第一个问题,抱歉我的英语不好或有任何错误
你应该改用这个:
.pushNamedAndRemoveUntil(/* Your Route */, (Route<dynamic> route) => false)
据我了解您的用户体验流程,用户将始终在应用启动时被定向到登录页面。如果用户已经登录,你应该避免导航到这条(那时候没用的)路线。而是尝试在构建方法中区分用户是否登录。如果用户已经登录,则构建主页。如果用户未登录,则构建登录页面。一旦用户登录,状态就会改变,主页就会被构建。
// your stateful component
bool isLoggedIn;
@override
Widget build(BuildContext context) {
if(isLoggedIn) {
return _buildHomepage();
} else {
return _buildLoginPage();
}
}
Widget _buildHomepage() {
// build your homepage
}
Widget _buildLoginPage() {
// build your login page
}
我今天遇到了这个问题,遇到了你的 Post。
虽然 PushNamedAndRemoveUntil 有效,但我的解决方案更简单:
确保您没有命名路线,这不是您的主屏幕“/”。
类似于:
MaterialApp(
title: 'Flutter Demo',
initialRoute: Screen1.routeName, // routeName = "/route1"
routes: {
Screen1.routeName: (ctx) => Screen1(), // routeName = "/route1"
Screen2.routeName: (ctx) => Screen2(), // routeName = "/"
Screen3.routeName: (ctx) => Screen3(), // routeName = "/screen2"
},
);
})
将使用 Screen1 启动您的应用程序,但将 Screen2 放在导航器堆栈的顶部。
我在 flutter 应用程序中使用 Navigator.pushReplacementNamed
从登录页面导航到主页运行良好,但在我的主页中显示 appBar 的后退箭头按钮,按下它时 returns 到登录页面。我应该怎么办?我试过 leading: Text('')
,但是当按下物理后退按钮时,它仍然返回到登录页面。
我有一个注销按钮,我希望用户只能通过此按钮注销,而不是通过后退按钮注销
*这是我的第一个问题,抱歉我的英语不好或有任何错误
你应该改用这个:
.pushNamedAndRemoveUntil(/* Your Route */, (Route<dynamic> route) => false)
据我了解您的用户体验流程,用户将始终在应用启动时被定向到登录页面。如果用户已经登录,你应该避免导航到这条(那时候没用的)路线。而是尝试在构建方法中区分用户是否登录。如果用户已经登录,则构建主页。如果用户未登录,则构建登录页面。一旦用户登录,状态就会改变,主页就会被构建。
// your stateful component
bool isLoggedIn;
@override
Widget build(BuildContext context) {
if(isLoggedIn) {
return _buildHomepage();
} else {
return _buildLoginPage();
}
}
Widget _buildHomepage() {
// build your homepage
}
Widget _buildLoginPage() {
// build your login page
}
我今天遇到了这个问题,遇到了你的 Post。 虽然 PushNamedAndRemoveUntil 有效,但我的解决方案更简单:
确保您没有命名路线,这不是您的主屏幕“/”。
类似于:
MaterialApp(
title: 'Flutter Demo',
initialRoute: Screen1.routeName, // routeName = "/route1"
routes: {
Screen1.routeName: (ctx) => Screen1(), // routeName = "/route1"
Screen2.routeName: (ctx) => Screen2(), // routeName = "/"
Screen3.routeName: (ctx) => Screen3(), // routeName = "/screen2"
},
);
})
将使用 Screen1 启动您的应用程序,但将 Screen2 放在导航器堆栈的顶部。