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

时间:2020-08-19 03:53:11

标签: flutter flutter-bloc

下面是代码。

  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? 处检查了答案。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以简单地使用

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");
相关问题