防止对话框在Flutter中关闭外部触摸

时间:2018-06-01 18:15:59

标签: android ios dialog dart flutter

在Flutter中,我在异步任务期间为loader编写简单的对话框。当我触摸外面的对话被解雇时,我该如何阻止这种行为?

代码

  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"),
                ),
              ],
            ),
          ),
        ));

任何帮助将不胜感激,谢谢你。

3 个答案:

答案 0 :(得分:14)

有一个名为barrierDismissible的属性,您可以传递给showDialog;这使得对话框在外部点击时不被允许

showDialog(
  barrierDismissible: false,
  builder: ...
)

答案 1 :(得分:6)

如果要防止在按下后退按钮时关闭对话框,请参考以下代码。您必须将AlertDialog包装在WillPopScope小部件中,并使onWillPop属性值为空函数。

showDialog(
      barrierDismissible: false,
      context: context,
      builder: (BuildContext context) {
        return WillPopScope(
            onWillPop: (){},
            child:AlertDialog(
            title: new Text("Alert Title"),
            content: new SingleChildScrollView(
              child: Container(),),
            actions: <Widget>[
              new FlatButton(
                child: new Text("Close"),
                onPressed: () {
                },
              ),
            ],
          )
        )
      },
    );

答案 2 :(得分:3)

只需添加这一行

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),
          );
        });