防止对话框在 Flutter 中关闭外部触摸
Posted
技术标签:
【中文标题】防止对话框在 Flutter 中关闭外部触摸【英文标题】:Prevent dialog from closing on outside touch in Flutter 【发布时间】:2018-11-11 22:12:18 【问题描述】:在 Flutter 中,我在异步任务期间为加载程序编写了简单的对话框。当我触摸外部对话框被关闭时,我该如何停止这种行为?
代码
showDialog(
context: context,
builder: (_) => new Dialog(
child: new Container(
alignment: FractionalOffset.center,
height: 80.0,
padding: const EdgeInsets.all(20.0),
child: new Row(
mainAxisSize: MainAxisSize.min,
children: [
new CircularProgressIndicator(),
new Padding(
padding: new EdgeInsets.only(left: 10.0),
child: new Text("Loading"),
),
],
),
),
));
任何帮助将不胜感激,在此先感谢您。
【问题讨论】:
***.com/questions/50635395/… 的副本已经有答案 【参考方案1】:始终使用*** Flutter 包,例如 get
Get.generalDialog(pageBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation,)
return SimpleDialog(
...
);
, barrierDismissible: false /* its default value */);
【讨论】:
【参考方案2】:只需添加此行
barrierDismissible: false,
喜欢
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context)
return AlertDialog(
title: Text(
"Classes",
style: TextStyle(
fontSize: 24, color: Colors.black, fontFamily: 'intel'),
),
content: setupAlertDialoadClassList(
context, listClasses, Icons.class__outlined, 0),
);
);
【讨论】:
【参考方案3】:如果您想在按下后退按钮时阻止对话框关闭,请参考以下代码。您必须将 AlertDialog 包装在 WillPopScope 小部件中,并使用返回 Future.value(false) 的函数使 onWillPop 属性值。
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context)
return WillPopScope(
onWillPop: () => Future.value(false),
child:AlertDialog(
title: new Text("Alert Title"),
content: new SingleChildScrollView(
child: Container(),),
actions: <Widget>[
new FlatButton(
child: new Text("Close"),
onPressed: ()
,
),
],
)
)
,
);
【讨论】:
现在无法使用onWillPop: ()
。适当的变体是onWillPop: () => Future.value(false)
或onWillPop: () async => false,
@ValentinaKonyukhova 是的,你是对的。我已经更新了我的答案。谢谢【参考方案4】:
有一个名为 barrierDismissible
的属性,您可以将其传递给 showDialog
;这使得对话框在外部点击时可以关闭或不关闭
showDialog(
barrierDismissible: false,
builder: ...
)
【讨论】:
如何处理barrierDismissible
.. 比如点击外部添加不同的活动
在 android 中,您仍然可以通过按 BACK 按钮关闭对话框。有没有办法防止这种情况发生?
Alex,您可以使用 WillPopScope 封装对话框构建器小部件。检查这个答案:***.com/questions/45916658/…
如果你使用showModalBottomSheet
那么你需要转isDismissible: false
showCupertinoDialog
也有这个属性。以上是关于防止对话框在 Flutter 中关闭外部触摸的主要内容,如果未能解决你的问题,请参考以下文章