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