我正在尝试在一秒钟后自动隐藏警报对话框
这是代码:
Widget popupWidget(BuildContext context, ...) {
Future.delayed(Duration(seconds: 1), () {
Navigator.of(context).pop();
});
return AlertDialog(...);}
什么有效:
我可以单击屏幕上的其他位置以关闭警报对话框
我可以等待一秒钟,它会自动关闭
错误:
如果在(确切地说?(一秒钟后,我单击屏幕上的其他地方(关闭警报对话框(,Future.delayed(...( 将不会隐藏警报对话框,而是隐藏整个屏幕
我尝试使showDialog
异步失败,也尝试了该行
Navigator.of(context, rootNavigator: true).pop();
我想我已经找到了解决方法:
bool popupIsActive = true;
Future.delayed(Duration(seconds: 1), () {
if (popupIsActive) Navigator.of(context).pop();
});
和
showDialog(...).then((_) {
popupIsActive = false;
});
您可能希望忽略对话框外的任何点击,以防止它关闭,并等待将来完成。您可以在 showDialog()
中将barrierDismissible
设置为 false。