如何在FutureBuilder中显示对话框

时间:2020-04-30 03:43:07

标签: flutter showdialog

在Flutter中, 我使用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中显示对话框。

1 个答案:

答案 0 :(得分:1)

当构建方法正在构建窗口小部件时,我们无法调用setState,navigate或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")),
            ],
          );
        });
  }

并在要显示对话框的地方调用此方法。