颤音:移至新屏幕而不提供导航回到上一个屏幕



我正在我的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");
      }
    });
  }

问题:我可以成功登录该应用程序,但是如果我在登录后点击返回按钮,它将返回到屏幕中的标志(我希望它将从应用程序退出(。

问题:如何在不返回的情况下从一个屏幕转移到另一个屏幕?

我需要以某种方式删除导航器历史记录吗?还是根本不使用导航器?我尝试了 navigator.replace 方法,但它似乎不起作用。

您也需要使用 Navigator.pushReplacement时,当留下也需要使用auth屏幕。不仅是重定向到登录页面时。

您可以使用pushAndRemoveUntil方法:

将给定的路线推到最紧密地封闭给定上下文的导航器上,然后删除所有以前的路由,直到predicate返回true。要删除按下路线下方的所有路线,请使用始终返回false (例如(Route<dynamic> route) => false(的[RoutePredicate]。

Navigator.pushAndRemoveUntil(
  context,
  MaterialPageRoute(builder: (context) => MainPage()),
  (Route<dynamic> route) => false,
);

您需要使用

Navigator
    .of(_context)
    .pushReplacement(new MaterialPageRoute(builder: (BuildContext context) => page));

其中_contextBuildContext的对象和page是您指向的页面。

只需添加以下代码:

Navigator.of(context).pushNamedAndRemoveUntil('/routeName', (route) => false);

我认为您可能已经解决了这个问题。但是您可以自动设置"自动绘制模拟:false"在您要导航的脚手架的Appbar中。

我通过从当前页面弹出并显示新页面来解决此问题:

Navigator.pop(context);
Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => newPage));

这是解决方案 -

使用pushandremoveuntil而不是按下

另外,可以使用维护状态:true

用于设置的根页

Navigator.pushAndRemoveUntil(
  context,
  MaterialPageRoute(
      builder: (context) => pageName, maintainState: true),
      (Route<dynamic> route) => false);

为"推"页面一页到另一页

Navigator.push(
context,
MaterialPageRoute(
    builder: (context) => pageName,
    maintainState: false),)

**如果您想在出现页面时始终刷新,则使用:**

维护状态:false

我们可以使用相同的路由喜欢:

routes: {
        LoginScreen.route_name: (_) => LoginScreen(),
        .....
      },  

并在要推开和删除背面时使用以下代码

Navigator.of(context).pushReplacementNamed(LoginScreen.route_name);

注意:定义窗口小部件内部的静态字符串

对于任何想知道有一个新参数的人需要返回false Navigator.of(context).pushNamedAndRemoveUntil('/', (route) => false);

Navigator.of(context, rootNavigator: true).pop();
Navigator.pushNamed(context, '/');

它对我不起作用,因为我使用的是房屋的投造,而不是在材料上使用初始浏览。

这是一个链接,有一个引起警告的链接,它帮助我发现了错误:https://docs.flutter.dev/cookbook/navigation/named-routes#2-define-tefine-tefine-tefine-tefine-the-routes

警告:使用initialRoute时,请勿定义家庭属性。

如果您正在使用getx state Management,则可以尝试此

Get.of(()=> NewPage());

相关内容

  • 没有找到相关文章

最新更新