Flutter 如何在FutureBuilder中显示对话框

Flutter 如何在FutureBuilder中显示对话框,flutter,showdialog,Flutter,Showdialog,飘飘然, 我使用FutureBuilder显示API中的数据。 我想弹出一个错误对话框时,有错误 但是,当我调用showDialog()时,它会抛出错误 这是我的密码 return FutureBuilder( future: xxx, builder: (context, snapshot) { if (snapshot.hasData) { //DO SOMETHING } else if (snapsho

飘飘然, 我使用FutureBuilder显示API中的数据。 我想弹出一个错误对话框时,有错误

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

这是我的密码

    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(
未来:xxx,
生成器:(上下文,快照){
if(snapshot.hasData){
//做点什么
}else if(snapshot.hasrerror){
//TODO:显示错误
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回警报对话框(
标题:文本(“错误”),
内容:文本(“哈哈哈”),
行动:[
扁平按钮(
子项:文本(“否”),
),
扁平按钮(
子项:文本(“是”)
),
],
);
}
);
返回容器();
}否则{
//做点什么
}
},

请帮助建议如何在FutureBuilder中显示对话框。

当构建方法正在构建小部件时,我们不能调用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")),
            ],
          );
        });
  }
showError()异步{
等待未来。延迟(持续时间(微秒:1));
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回警报对话框(
标题:文本(“错误”),
内容:文本(“哈哈哈”),
行动:[
扁平按钮(
子项:文本(“否”),
),
扁平按钮(子项:文本(“是”),
],
);
});
}

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

当生成方法正在生成小部件时,我们不能调用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")),
            ],
          );
        });
  }
showError()异步{
等待未来。延迟(持续时间(微秒:1));
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回警报对话框(
标题:文本(“错误”),
内容:文本(“哈哈哈”),
行动:[
扁平按钮(
子项:文本(“否”),
),
扁平按钮(子项:文本(“是”),
],
);
});
}
并在要显示对话框的位置调用此方法