gpt4 book ai didi

flutter - 如何在 FutureBuilder 中显示对话框?

转载 作者:IT王子 更新时间:2023-10-29 07:02:33 28 4
gpt4 key购买 nike

如果我在 FutureBuilder 中收到错误,我想显示一个对话框。

如果我收到一个错误,我想显示一个对话框并强制用户点击按钮,这样他就可以被重定向到另一个页面。

问题似乎是在构建小部件时无法显示对话框。

FutureBuilder(
future: ApiService.getPosts(),
builder: (BuildContext context, AsyncSnapshot snapShot) {
if (snapShot.connectionState == ConnectionState.done) {
if (snapShot.data.runtimeType == http.Response) {
var message =
json.decode(utf8.decode(snapShot.data.bodyBytes));

showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return AlertDialog(
content: Text(message),
actions: <Widget>[
FlatButton(
child: Text("Ok"),
onPressed: () => null",
)
],
);
});
}
return ListView.separated(
separatorBuilder: (BuildContext context, int index) {
return Divider(
color: Colors.grey,
height: 1,
);
},
itemBuilder: (BuildContext context, int index) {
return _buildPostCard(index);
},
itemCount: snapShot.data.length,
);
return Center(
child: CircularProgressIndicator(),
);
},
)

如果我单独返回 AlertDialog,它会起作用。但由于 barrierDismissible 属性,我需要 showDialog。

有人知道这是否可行吗?另外,这是处理我想要的东西的好方法吗?

谢谢

更新

为了进一步引用,工作中的 friend 有解决方案。

为了完成我正在寻找的事情,我必须决定将哪个 future 传递给 futureBuilder。

Future<List<dynamic>> getPostsFuture() async { 
try {
return await ApiService.getPosts();
} catch (e) {

await showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return AlertDialog(
content: Text(message),
actions: <Widget>[
FlatButton(
child: Text("Ok"),
onPressed: () => null",
)
],
);
});
}
}

然后在 futureBuilder 中我会调用

FutureBuilder(
future: getPostsFuture(),

谢谢

最佳答案

为了避免 setState() or markNeedsBuild() called during build error when using showDialog wrap it into Future.delayed 像这样:

Future.delayed(Duration.zero, () => showDialog(...));

关于flutter - 如何在 FutureBuilder 中显示对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56894644/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com