这是我通常将对话框的barrierDismissible
字段设置为true或false的方式
showDialog(
barrierDismissible: false,
builder: ...
)
但是,这意味着对话框始终是对还是错。
是否有办法以一秒钟 false 的身份启动对话框barrierDismissible
并将其更改为 true ?
答案 0 :(得分:1)
似乎没有声明式的声明方法应用于此小部件。因此,您应该自己做所有事情。
首先使用以下方法处理水龙头:
第二次使用变量来说明是否应激活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,
),
),
),
),
);
},
);
},
),
);
}
}
答案 1 :(得分:0)
创建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;
});
});
}