如何使用 Navigator.of(context).pop() 在一秒钟后隐藏 alertDialog



我正在尝试在一秒钟后自动隐藏警报对话框

这是代码:

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。

最新更新