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

时间:2019-08-07 13:11:56

标签: flutter dart

我试图在一秒钟后自动隐藏一个alertDialog

这是代码:

Widget popupWidget(BuildContext context, ...) {
  Future.delayed(Duration(seconds: 1), () {
    Navigator.of(context).pop();
  });
  return AlertDialog(...);}

有效方法:

  • 我可以单击屏幕上的其他位置以关闭alertDialog

  • 我可以等待一秒钟,它会自动关闭

错误:

如果(恰好?)一秒钟后,我单击屏幕上的其他位置(关闭alertDialog),则Future.delayed(...)将不会隐藏alertDialog,而是整个屏幕

我尝试使showDialog异步,但也尝试了这一行

Navigator.of(context, rootNavigator: true).pop();

2 个答案:

答案 0 :(得分:2)

我想我找到了一种解决方法:

bool popupIsActive = true;

Future.delayed(Duration(seconds: 1), () {
if (popupIsActive) Navigator.of(context).pop();
});

showDialog(...).then((val) {
popupIsActive = false;
});

答案 1 :(得分:1)

您可能希望忽略对话框外的任何轻按,以防止其消失,只是等待将来完成。您可以在barrierDismissible中将showDialog()设置为false。