Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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_Dialog - Fatal编程技术网

Flutter 显示对话框后设置屏障可解除

Flutter 显示对话框后设置屏障可解除,flutter,dialog,Flutter,Dialog,这是我通常将对话框的barrierDismissible字段设置为true或false的方式 showDialog( 禁止:错误, 建筑商:。。。 ) 然而,这意味着对话框总是正确或错误的 有没有办法启动一个对话框barrierDismissibleasfalse并在一秒钟后将其更改为true?创建bool变量并将其设置为barrierDismissible属性并使用Future.delayed(持续时间:持续时间(秒:1))要进行1秒计数,则当计数器完成时,将变量设置为true,如下所示 o

这是我通常将对话框的
barrierDismissible
字段设置为true或false的方式

showDialog(
禁止:错误,
建筑商:。。。
)
然而,这意味着对话框总是正确或错误的


有没有办法启动一个对话框
barrierDismissible
asfalse并在一秒钟后将其更改为true

创建bool变量并将其设置为barrierDismissible属性并使用Future.delayed(持续时间:持续时间(秒:1))要进行1秒计数,则当计数器完成时,将变量设置为true,如下所示

onPressed:(){
bool dismissible=false;
showDialog(context: context,barrierDismissible: dismissible); //add your child
        Future.delayed(Duration(seconds: 1)).whenComplete(() {

          setState(() {
            dismissible=true;
          });
        });

}

看起来Flatter声明性方法没有应用于此小部件。因此,你应该自己做每件事

首先,用以下方法操作水龙头:

  • 用于关闭对话框的通用手势检测器
  • 在对话框周围安装一个手势检测器,以防止点击事件在对话框内的小部件中发生时冒泡
第二,使用一个变量说明是否应激活
障碍物ismissible
,并在1秒后修改此变量。这是一个变量,应该用作通用手势检测器,以便知道它是否应该关闭对话框

下面是一个快速示例,只需点击晶圆厂:

import 'package:flutter/material.dart';

void main() => runApp(
      MaterialApp(
        home: MyApp(),
      ),
    );

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool barrierDismissible = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          showDialog(
            context: context,
            builder: (BuildContext context) {
              barrierDismissible = false;
              Future.delayed(
                  Duration(seconds: 1),
                  () => setState(() {
                        barrierDismissible = true;
                      }));
              return GestureDetector(
                onTap: () {
                  if (barrierDismissible) {
                    Navigator.of(context, rootNavigator: true).pop();
                  }
                },
                child: Material(
                  color: Colors.transparent,
                  child: GestureDetector(
                    onTap: () {},
                    child: Center(
                      child: Container(
                        height: 200,
                        width: 200,
                        color: Colors.red,
                      ),
                    ),
                  ),
                ),
              );
            },
          );
        },
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(
材料聚丙烯(
主页:MyApp(),
),
);
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
bool barrierDismissible=错误;
@凌驾
小部件构建(构建上下文){
返回脚手架(
浮动操作按钮:浮动操作按钮(
已按下:(){
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
barrierDismissible=错误;
推迟(
持续时间(秒:1),
()=>设置状态(){
barrierDismissible=正确;
}));
返回手势检测器(
onTap:(){
如果(禁止使用){
of(context,rootNavigator:true).pop();
}
},
儿童:材料(
颜色:颜色。透明,
儿童:手势检测器(
onTap:(){},
儿童:中心(
子:容器(
身高:200,
宽度:200,
颜色:颜色,红色,
),
),
),
),
);
},
);
},
),
);
}
}

您是否测试了您的解决方案?这对我不起作用。