在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中显示对话框。
答案 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")),
],
);
});
}
并在要显示对话框的地方调用此方法。