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

Mag*_*ian 9 android dialog ios 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"),
                ),
              ],
            ),
          ),
        ));
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,谢谢你提前.

Rém*_*let 35

有一个叫做barrierDismissible你可以传递的财产showDialog; 这使得对话框在外部点击时不被允许或不被允许

showDialog(
  barrierDismissible: false,
  builder: ...
)
Run Code Online (Sandbox Code Playgroud)

  • Alex 您可以使用 WillPopScope 封装对话框构建器小部件。检查这个答案:/sf/ask/3214166091/ (5认同)
  • 如何处理`barrierDismissible` .. 就像点击外部添加不同的活动一样 (2认同)
  • 在Android中,您仍然可以通过按BACK按钮关闭对话框。有没有办法防止这种情况? (2认同)

Sac*_*ure 24

If you want to prevent dialog close when back button pressed then refer below code. You have to wrap your AlertDialog in WillPopScope widget and make onWillPop property value with function which return Future.value(false).

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: () {
                },
              ),
            ],
          )
        )
      },
    );
Run Code Online (Sandbox Code Playgroud)

  • 现在不可能使用`onWillPop:(){}`。适当的变体是 `onWillPop: () =&gt; Future.value(false)` (6认同)

小智 7

屏障可关闭:假,

按照我下面的描述使用这个。showDialog( BarrierDismissible: false, builder // 代码 //


San*_*eek 5

只需添加这一行

barrierDismissible: false,
Run Code Online (Sandbox Code Playgroud)

像作为

       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),
          );
        });
Run Code Online (Sandbox Code Playgroud)


Piu*_*T.K 5

这将禁用设备导航

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