Flutter 颤振中的自动关闭对话框
我想在打开后几秒钟自动关闭对话框。我找到的解决方案是调用Flutter 颤振中的自动关闭对话框,flutter,dart,Flutter,Dart,我想在打开后几秒钟自动关闭对话框。我找到的解决方案是调用Navigator.of(context.pop()延迟,它可以工作。但是,如果在执行Navigator.pop命令之前手动(通过单击外部)关闭它,就会出现问题。然后Navigator.pop关闭应用程序,我看到的只是一个黑屏。 我需要一种方法来消除关闭对话框时的延迟,或者找到另一种解决方法 showDialog( context: context, builder: (BuildContext builderContext) {
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'),
),
);
}
);
您可以使用不同的方式使用计时器执行pop()请求
_timer = Timer(Duration(seconds: _timerTimeoutInterval), () {
Navigator.of(context).pop();
});
如果你想取消计时器,你可以调用:
if (_timer != null && _timer.isActive) {
_timer.cancel();
}
您可以使用一个。你可以随时取消计时器
在类中声明计时器属性:
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();
}
});
在这种情况下,您使用的上下文是错误的
尝试更改您在“pop”中使用的上下文
您有这个BuildContext-builderContext
,使用这个builderContext,比如:
Navigator.of(builderContext).pop();
您可以通过创建按钮并在该按钮的onPress回调中执行Navigator pop方法来手动关闭它。是的,但我想通过单击外部来关闭它。啊,抱歉,我读错了问题。为了关闭对话框并取消pop的执行,您需要使用计时器,可以根据需要取消计时器。我将编辑我的初始答案。