gpt4 book ai didi

async-await - 如何将 showDialog 与 await 一起使用

转载 作者:行者123 更新时间:2023-12-05 02:13:52 28 4
gpt4 key购买 nike

我有三个 showDialog 示例。我认为 _showAlert1 是正确的,但它使用 2 个函数来实现它。 _showAlert2 也有效,但我认为它不正确,因为我认为 showDialog 是异步的,并且我认为此功能依赖于在足够的时间内显示的对话框。 _showAlert3 不起作用,因为对话框停留在屏幕上并且不会清除。

如果 _showAlert2 虽然可以正常工作但由于上述原因是不正确的,有人可以告诉我应该如何构建它以便可以在一个函数中完成。

示例:

void _showAlert0(BuildContext context, String text, int seconds) async {
return await showDialog(
barrierDismissible: false,
context: context,
builder: (context) => AlertDialog(
title: Text("Error"),
content: Text(text),
));
}

void _showAlert1(BuildContext context, String text, int seconds) async {
_showAlert0(context, text, seconds);
await Future.delayed(Duration(seconds: seconds));
Navigator.of(context).pop(true);
}

void _showAlert2(BuildContext context, String text, int seconds) async {
showDialog(
barrierDismissible: false,
context: context,
builder: (context) => AlertDialog(
title: Text("Error"),
content: Text(text),
));
await Future.delayed(Duration(seconds: seconds));
Navigator.of(context).pop(true);
}

void _showAlert3(BuildContext context, String text, int seconds) async {
await showDialog(
barrierDismissible: false,
context: context,
builder: (context) => AlertDialog(
title: Text("Error"),
content: Text(text),
));
await Future.delayed(Duration(seconds: seconds));
Navigator.of(context).pop(true);
}

最佳答案

不确定是否有更好的方法,但以下方法似乎有效。请注意调用 showDialog() 时的“then”子句。

void _showAlert3(BuildContext context, String text, int seconds) async {
showDialog(
barrierDismissible: false,
context: context,
builder: (context) => AlertDialog(
title: Text("Error"),
content: Text(text),
)).then((val) {});
await Future.delayed(Duration(seconds: seconds));
Navigator.of(context).pop(true);
}

至于喷子,RTFQ(“结构化使得这可以在一个函数中完成”),如果你不想帮忙就走开。

关于async-await - 如何将 showDialog 与 await 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54490812/

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