【问题标题】:Flutter: showing one dialog at a timeFlutter:一次显示一个对话框
【发布时间】:2021-07-10 18:44:17
【问题描述】:

我对 Flutter 中的状态管理相当陌生,我有一个应用程序,用户将在其中与对话框交互,并且对话框可能有一个按钮来打开另一个对话框,这可能会导致以下结果:

https://i.stack.imgur.com/VBSzr.png

如图所示,当一次打开多个对话框时会出现多个问题 - 最明显的是前一个对话框在后台仍然可见。那么当用户打开一个新对话框时,有什么方法可以隐藏它后面的对话框,当最前面的对话框关闭时,显示前一个隐藏的对话框?提前致谢。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    在打开第二个对话框之前,使用Navigator.pop(context); 方法关闭按钮onPressed 上的对话框。

    然后在关闭第二个对话框时,您可以重新打开上一个对话框。

    例子:

    showDialog(
          context: context,
          builder: (context) {
            return AlertDialog(
              title: Text("Hello World"),
              content: Text("This is content"),
              actions: [
                TextButton(
                    onPressed: () {
                      Navigator.pop(context);  //Close your current dialog
                      //TODO:open your second dialog
                    },
                    child: Text("Open"))
              ],
            );
          });
    

    【讨论】:

      【解决方案2】:

      我会首先尝试重新考虑同时打开多个对话框的逻辑。

      也许有一个快速的解决方法,但如果你继续添加越来越多的对话框,那么它会变得一团糟。

      由于showDialog<T> 函数返回Future<T?>,您可以使用await 并等待第一个对话框关闭,然后打开第二个对话框,依此类推:

      bool canContinue = await showDialog<bool>(
                  context: context,
                  builder: (context) => YourWidget(),
                );
      

      或者,您可以使用Navigator 弹出,但如上所述,用户可以看到正在发生一些奇怪的事情(以编程方式推送和弹出对话框)。

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 1970-01-01
        • 2021-04-22
        • 1970-01-01
        • 2021-03-22
        • 1970-01-01
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        相关资源
        最近更新 更多