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 放在导航器堆栈的顶部。