【问题标题】:How to showDialog in FutureBuilder如何在 FutureBuilder 中显示对话框
【发布时间】:2020-04-30 03:43:07
【问题描述】:

在颤振中, 我使用 FutureBuilder 来显示来自 API 的数据。 我想在出现错误时弹出一个错误对话框。

但是,当我调用 showDialog() 时它会抛出错误

setState() or markNeedsBuild() called during build.

这是我的代码

    return FutureBuilder(
      future: xxx,
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          //DO SOMETHING

        } else if (snapshot.hasError) {
          //TODO: Show Error

          showDialog(
              context: context,
              builder: (BuildContext context) {
                return AlertDialog(
                  title: Text("Error"),
                  content: Text("HAHAHA"),
                  actions: <Widget>[
                    FlatButton(
                      child: Text("No"),
                    ),
                    FlatButton(
                        child: Text("Yes")
                    ),
                  ],
                );
              }
          );

          return Container();

        } else {
          //DO SOMETHING
        }
      },

请帮忙告诉我如何在 FutureBuilder 中显示对话框。

【问题讨论】:

    标签: flutter showdialog


    【解决方案1】:

    当 build 方法正在构建小部件时,我们不能调用 setState、navigation 或 showDialog。所以,我们可以等待一微秒,同时构建方法完成构建小部件,这样我们就可以显示对话框了。

    创建一个类似下面的方法。

    showError() async {
        await Future.delayed(Duration(microseconds: 1));
        showDialog(
            context: context,
            builder: (BuildContext context) {
              return AlertDialog(
                title: Text("Error"),
                content: Text("HAHAHA"),
                actions: <Widget>[
                  FlatButton(
                    child: Text("No"),
                  ),
                  FlatButton(child: Text("Yes")),
                ],
              );
            });
      }
    

    并在你想显示对话框的地方调用这个方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 2020-05-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      相关资源
      最近更新 更多