Flutter:在不提供导航回先前屏幕的情况下切换到新屏幕

123

我正在我的Flutter应用程序中实现身份验证流程。

在登录尝试后,CheckAuth被打开 (检查用户是否已登录,然后相应地打开主屏幕或注册屏幕),使用以下代码:

  void _signIn() async {
    await _auth
        .signInWithEmailAndPassword(
            email: _userEmail.trim(), password: _userPassword.trim())
        .then((task) {
      // go to home screen
      if (task.getIdToken() != null) {
        setState(() {
          Navigator.pushReplacement(
              context,
              new MaterialPageRoute(
                  builder: (BuildContext context) => new CheckAuth()));
        });
      } else {
        print("Authentication failed");
      }
    });
  }

问题:我可以成功登录应用程序,但是如果在登录后点击返回按钮,则会回到登录屏幕(而我希望它退出应用程序)。

问题:如何在Flutter中从一个屏幕移动到另一个屏幕而不返回?

我需要删除导航历史记录吗?还是根本不使用导航?我尝试了Navigator.replace方法,但似乎没有起作用。


1
你的应用程序默认路由是登录界面吗? - Günter Zöchbauer
3
Navigator.pushReplacement() 在我的测试中运行得非常完美。您能否分享完整的代码? - Dhrumil Shah - dhuma1981
@GünterZöchbauer 不是默认路由CheckAuth。问题在于我有一个注册屏幕,我有一个按钮,它通过Navigator.push推送登录屏幕。因此,当用户登录并导航回来时,他回到了注册屏幕。我用Navigator.pushReplacement替换了Navigator.push,现在它运行良好。谢谢! - Darkhan
@dhuma1981 是的,你说得对,.pushReplacement() 很好用。问题是我有一个注册页面,在那里我有一个按钮,它使用 Navigator.push 推送登录页面。所以当用户登录并导航回来时,他会回到注册页面。我用 Navigator.pushReplacement 替换了 Navigator.push,现在它很好用。谢谢! - Darkhan
1
Navigator.pushReplacement( context, MaterialPageRoute( builder: (context) => HomeScreen(), ), ); Navigator.pushReplacement() 不起作用。在从当前屏幕重定向到HomeScreen后,仍然显示返回箭头图标。还有其他解决方案吗?请分享。 - Kamlesh
12个回答

0

-2
如果你正在使用 GetX 状态管理,那么你可以尝试这个。
Get.of(()=> NewPage());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接