Flutter 中的自动关闭对话框

mic*_*obg 0 dart flutter

我想在打开后几秒钟自动关闭对话框。我找到的解决方案是调用Navigator.of(context).pop();延迟并且它有效。但是如果我在执行 Navigator.pop 命令之前手动关闭它(通过单击外部)就会出现问题。然后 Navigator.pop 关闭应用程序,我只看到一个黑屏。我需要一种方法来消除关闭对话框时的这种延迟或找到另一种解决方法。

showDialog(
  context: context,
  builder: (BuildContext builderContext) {
    Future.delayed(Duration(seconds: 5), () {
      Navigator.of(context).pop();
    });

    return AlertDialog(
      backgroundColor: Colors.red,
      title: Text('Title'),
      content: SingleChildScrollView(
        child: Text('Content'),
      ),
    );
  }
);
Run Code Online (Sandbox Code Playgroud)

Mid*_* MP 6

您可以使用Timer来实现这一点。您可以随时取消计时器。

在你的类中声明一个计时器属性:

Timer _timer;
Run Code Online (Sandbox Code Playgroud)

并更改您的 showDialog 代码,例如:

showDialog(
  context: context,
  builder: (BuildContext builderContext) {
    _timer = Timer(Duration(seconds: 5), () {
      Navigator.of(context).pop();
    });

    return AlertDialog(
      backgroundColor: Colors.red,
      title: Text('Title'),
      content: SingleChildScrollView(
        child: Text('Content'),
      ),
   );
  }
).then((val){
  if (_timer.isActive) {
    _timer.cancel();
  }
});
Run Code Online (Sandbox Code Playgroud)