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,
颜色:颜色,红色,
),
),
),
),
);
},
);
},
),
);
}
}
您是否测试了您的解决方案?这对我不起作用。