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

2024-03-02

下面是代码。

  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 或不设置为 true,但无法实现我的目标。

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

我在这里检查了答案如何关闭颤动对话框? https://stackoverflow.com/a/50683571/13390181.


你可以简单地使用

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

UPDATE:

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

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

当你提升你的材料等级时。

然后在弹出使用的时候

Navigator.popUntil(context, (route) => route.settings.name == "nameOfYourClass");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter:如何弹出对话框以及当前页面? 的相关文章

随机推荐

  • 如何在 VSTS 部署期间从 Azure Web App 删除文件

    我有一个 Azure Web 应用程序 我将一些数据存储在它的持久存储中 通过我的 VSTS 发布定义 我想删除一个填充了数据的文件夹 该文件夹位于D home site MyFolder 有没有办法可以在部署期间以编程方式从 VSTS 发
  • 哪里有一些好的 Xlib 编程指南?

    我现在对 Xlib 编程有点困惑 几周前我开始使用 dwm 一个轻量级窗口管理器 我想找一些 Xlib 编程书籍或在线资源来自定义 dwm 然而 在网上搜索后 我没有看到太多关于 Xlib 的新文章 亚马逊上最新的X窗口系统编程指南是199
  • 我的spark sql限制非常慢

    我使用spark从elasticsearch中读取 Like select col from index limit 10 问题是索引非常大 它包含 1000 亿行 而 Spark 会生成数千个任务来完成这项工作 我只需要 10 行 即使
  • 将 pyqtgraph 导出到视频

    我想将 pyqtgraph 导出到视频 有什么简单的方法可以做到这一点吗 该图与此示例没有太大区别 只是它包含大约 10000 帧 from pyqtgraph Qt import QtGui QtCore import numpy as
  • poi 中的 IRR 返回 NaN 但 excel 中的值正确

    当我使用 apache poi 计算 Irr 值时 我得到 Double NaN 但 excel 中的相同输入我得到负值 那么为什么它们返回不同的值呢 inputs here irr 1 0601017230994111E8 19150 6
  • React-native 链接找不到我的 MainApplication.java 文件

    每次我尝试react native link一个新的库 我收到同样的错误消息 这是用于react native video的 rnpm install info Linking react native video android depe
  • 为什么在 google chrome 浏览器中尝试时,javaScript 中的“navigator.userAgent”会返回字符串“Mozilla”?

    我正在开发 javaScript 代码 我想确定客户端浏览器的版本和品牌 这是我用来执行此操作的代码段 var browserName function BrowserCheckin if navigator userAgent index
  • 如何在 C# 中为大型 HTTP 请求设置 HttpWebRequest.Timeout

    我不知道如何处理 HttpWebRequest Timeout 之前 我曾经为 Socket 对象设置超时 这很简单 超时设置发送或接收数据块的最长时间 然而 HttpWebRequest Timeout 似乎设置了整个 HTTP 请求的超
  • Bash Shell 脚本 - 检查标志并获取其值

    我正在尝试制作一个 shell 脚本 其设计如下运行 script sh t application 首先 在我的脚本中 我想检查脚本是否已使用 t 标志运行 例如 如果它在没有像这样的标志的情况下运行 我希望它出错 script sh 其
  • 使用左值引用作为非类型模板参数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我读到以下类型允许作为非类型模板参数 整数类型 enum ptr 到对象 方法 对对象 方法的左值引用 std nullptr t 我不明白
  • 从 pandas 单元格中删除 html 格式

    我在 pandas 上有这个 DataFrame import pandas as pd df pd DataFrame CARGO 53944 Driver 57389 Driver 60851 Driver 64322 Driver 6
  • 在 LInux Mint 19.3 上安装 R4.0 时出现问题

    我尝试在 Linux Mint 19 3 上安装 R 4 0 但收到以下错误消息 The following packages have unmet dependencies r base core Depends libc6 gt 2 2
  • 如何在 Avfoundation 中正确更改采样率

    我已经完成了这个简单的程序 它的作用是同时记录和播放缓冲区 如果采样率为 44100 Hz 一切正常 但如果我将采样率更改为 16000 或 8000 它根本不会产生任何声音 或者可能是一些听不见的白噪声 为什么会发生这种情况 如何以不同的
  • Eclipse ADT 中的三星 Galaxy s4

    我想在 Samsung Galaxy S4 中测试我的应用程序 我已检查 未知来源 并启用开发人员菜单并检查 调试模式 但显示为离线状态 C Program Files x86 Android android sdk platform to
  • Webservice.wsdl 和凭据

    所以我有一个问题正在努力解决 也许一些 Flex 专家可以提供帮助 我有一个 WebService 实例 它尝试从 JBoss 应用程序服务器加载 WSDL 文件 如果我做这样的事情 webService new WebService we
  • 使用 @Valid 注释无法在本机检测到 JSR-303 错误

    为什么 Valid 注释本身不能捕获我的 JSR 303 注释 但可以使用以下方法捕获它们 WebConfig java Bean public ResourceBundleMessageSource messageSource Resou
  • 对于 IE 给出完整路径,仅需要文件名

    当从 IE 浏览器执行上传时 我的后端 org apache commons fileupload 获取完整的文件路径 对于其他非 IE 浏览器 它会获取文件名 并且出于安全考虑 这是可以的 如何获得filename只能从 IE 输入吗 是
  • 如何在playframework中从超类继承模型

    我试图了解继承是如何发挥作用的 但还没有成功 所以 我有这样的超类 Inheritance strategy InheritanceType TABLE PER CLASS abstract class SuperClass extends
  • 读取流中的实时完整输出

    注意 这篇文章与此有所不同post https stackoverflow com questions 1281140 run process with realtime output in php其接受的答案只是阅读每一行一次 我必须在服
  • Flutter:如何弹出对话框以及当前页面?

    下面是代码 从主页导航到登录页面 ElevatedButton onPressed gt Navigator of context rootNavigator true push MaterialPageRoute fullscreenDi