Flutter:如何弹出对话框和当前页面? [英] Flutter: How do I pop dialog as well as current page?

查看:85
本文介绍了Flutter:如何弹出对话框和当前页面?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是代码.

  1. 从主页导航到登录页面

    ElevatedButton(
              onPressed: () => Navigator.of(context, rootNavigator: true)
                  .push(MaterialPageRoute(
                fullscreenDialog: true,
                builder: (context) => UserLoginPage(),
              )),
              child: Text('Login to continue'),
            ),

内部登录页面:

BlocConsumer<UserAuthCubit, UserAuthState>(
            listener: (context, state) {
              if (state is UserAuthorized) {
                Navigator.of(context, rootNavigator: true).pop();
              }
              if (state is UserAuthWaiting) {
                showModalBottomSheet(
                    useRootNavigator: true,
                    isDismissible: false,
                    context: context,
                    builder: (context) {
                      return WillPopScope(
                        onWillPop: () async => false,
                        child: Center(
                          child: Text(state.msg),
                        ),
                      );
                    });
                dialog = true;
              } else {
                if (dialog) {
                  Navigator.of(context, rootNavigator: true).pop();
                  dialog = false;
                }
              }
            },
            builder: (context, state) { // some widget code... }

当状态为 UserAuthorized 时,我想弹出对话框和LoginPage,以便返回到最后一页,即主页.但是,使用上面的代码有时会起作用,而在另一时间,还会弹出主页".我尝试了将rootNavigator设置为/不设置为true的情况,但是没有实现我的目标.

When the state is UserAuthorized, I want to pop the dialog as well as the LoginPage, so as to return to the last page i.e. Home page. However, with the code above, sometimes, it works, and on another time, the Home page is also popped out. I tried, with/without rootNavigator set to true, but couldn't achieve my objective.

请帮助我了解我在这里所缺少的内容.

Please help me understand what I'm missing here.

我已经在此处检查了答案如何关闭抖动对话框?.

I have checked the answer here How to dismiss flutter dialog? .

推荐答案

您可以简单地使用

Navigator.popUntil(context, (route) {
            return count++ == 2;
          });

更新:

如果您不知道应该弹出多少页面,则应该使用

If you don't know how many page you should pop then you should use

Navigator.push(context, MaterialPageRoute(builder: (context)=>YourMaterialClassName(), settings: RouteSettings(name: "nameOfYourClass")));

当您推动材料课时.

然后在弹出窗口时使用

Navigator.popUntil(context, (route) => route.settings.name == "nameOfYourClass");

这篇关于Flutter:如何弹出对话框和当前页面?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆