Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振中的自动关闭对话框_Flutter_Dart - Fatal编程技术网

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的执行,您需要使用计时器,可以根据需要取消计时器。我将编辑我的初始答案。