如何设置AlertDialog以免在颤动时关闭外部

时间:2018-06-01 02:43:33

标签: alertdialog flutter

我构建了一个AlertDialog来显示加载,同时我对用户进行身份验证,当它完成后我弹出它。

Widget loadingDialog = new AlertDialog(
content: new Row(
  children: <Widget>[
    new CircularProgressIndicator(),
    Padding(
      padding: const EdgeInsets.only(left: 8.0),
      child: new Text("Loading..."),
    ),
  ],
),);

但是,如果用户点击对话框外,它会关闭。因此,当auth完成时,它仍会弹出一些东西(我猜是脚手架),打破了应用程序。 如何让Dialog不能关闭?

3 个答案:

答案 0 :(得分:9)

showDialog内有一个名为barrierDismissible的属性。将此值设置为false将使您的AlertDialog无法通过单击外部关闭。

showDialog(
   ...
   barrierDismissible: false,
   ...

答案 1 :(得分:0)

//用户定义功能 void _showloding(){

// flutter defined function
showDialog(
  barrierDismissible: false, // JUST MENTION THIS LINE
  context: context,
  builder: (BuildContext context) {
    // return object of type Dialog
    return AlertDialog(
      content: Padding(
        padding: const EdgeInsets.all(20.0),
        child: Container(height: 100,width: 100,child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Center(child: SizedBox(height: 50,width: 50,child: CircularProgressIndicator())),
            Padding(
              padding: const EdgeInsets.only(top: 20),
              child: Center(child: Text("Processing")),
            )
          ],
        )),
      )
    );
  },
);

}

答案 2 :(得分:0)

为了防止在按下后退按钮时关闭对话框,您还应该将 AlertDialog(或任何其他小部件)包裹在 WillPopScope 中。

showDialog(
  context: context,
  barrierDismissible: false, // <-- Set this to false.
  builder: (_) => WillPopScope(
    onWillPop: () async => false, // <-- Prevents dialog dismiss on press of back button.
    child: AlertDialog(...),
  ),
);