Flutter中的“自动关闭”对话框

时间:2020-04-19 15:50:40

标签: flutter dart

我想在打开几秒钟后自动关闭对话框。我发现的解决方案是延迟调用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'),
      ),
    );
  }
);

3 个答案:

答案 0 :(得分:3)

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

在您的课程中声明一个计时器属性:

Timer _timer;

并更改您的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();
  }
});

答案 1 :(得分:1)

您可以使用不同的方式通过Timer执行pop()请求

_timer = Timer(Duration(seconds: _timerTimeoutInterval), () {
    Navigator.of(context).pop();
});

如果您想取消计时器,可以致电:

if (_timer != null && _timer.isActive) {
  _timer.cancel();
}

答案 2 :(得分:1)

在这种情况下,您使用的是错误 context

尝试更改您在“流行音乐”中使用的context

您有这个BuildContext builderContext,请使用那个 builderContext,例如:

Navigator.of(builderContext).pop();