如何在 FutureBuilder 中显示对话框
How to showDialog in FutureBuilder
在颤动中,
我使用 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中显示Dialog
我们无法在构建方法构建小部件时调用 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")),
],
);
});
}
然后在你想显示对话框的地方调用这个方法。
在颤动中, 我使用 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中显示Dialog
我们无法在构建方法构建小部件时调用 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")),
],
);
});
}
然后在你想显示对话框的地方调用这个方法。