Flutter:如何弹出对话框和当前页面?

问题描述

下面是代码

  1. 从主页导航到登录页面
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

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

请帮助我了解我在这里缺少什么。

我已经在How to dismiss flutter dialog? 处检查了答案。

解决方法

我建议对话框之后返回true,而不要使用Navigator.of(context).pop()。您可以尝试使用Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => HomePage()))。这样,您可以用HomePage替换LoginPage

,

您可以简单地使用

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

更新:

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

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

在您推动材料课时。

然后在弹出窗口时使用

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