如何解决在显示对话框后将屏障设置为可忽略
这是我通常将对话框的barrierDismissible
字段设置为true或false的方式
showDialog(
barrierDismissible: false,builder: ...
)
但是,这意味着对话框始终是对还是错。
是否有办法以一秒钟 false 的身份启动对话框barrierDismissible
并将其更改为 true ?
解决方法
似乎没有声明式的声明方法应用于此小部件。因此,您应该自己做所有事情。
首先使用以下方法处理水龙头:
- 将用于关闭对话框的常规手势检测器。
- 对话框周围的手势检测器,以防止点击事件在对话框内部的小部件中发生时冒泡。
第二次使用变量来说明是否应激活barrierDismissible
,并在1秒钟后修改此变量。此变量应该用作常规手势检测器,以便知道是否应该关闭对话框。
以下是一个快速示例,只需轻按FAB:
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,);
},);
},);
}
}
,
创建bool变量并将其设置为barrierDismissible属性,并使用Future.delayed(duration:Duration(seconds:1))进行一秒钟的计数,然后在计数器完成时像这样将变量设置为true。
onPressed:(){
bool dismissible=false;
showDialog(context: context,barrierDismissible: dismissible); //add your child
Future.delayed(Duration(seconds: 1)).whenComplete(() {
setState(() {
dismissible=true;
});
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。