如何检查警报对话框是否在抖动中打开

Jag*_*ngh 6 dart flutter

我正在使用flutter应用程序,我想检查警报对话框是否在屏幕上打开。谁能告诉我该怎么做,基本上我想在警报对话框打开和关闭之前和之后做一些事情。

Min*_*rid 46

你可以使用这个方法:

_isThereCurrentDialogShowing(BuildContext context) =>
  ModalRoute.of(context)?.isCurrent != true;
Run Code Online (Sandbox Code Playgroud)

  • 完美的解决方案.. (2认同)

小智 11

我有同样的问题。也许我的解决方案对某人会更好:

_isOpen = true;
showDialog(
    context: context,
    child: AlertDialog(
      title: Text("Some title!"),
      content: Text("Some content!"),
    )).then((_) => _isOpen = false);
Run Code Online (Sandbox Code Playgroud)

then警报关闭时将运行。


Cop*_*oad 9

第一件事是您将自己显示对话框。因此,您可以使用一个bool值来跟踪它。

像这样。

bool _isDialogShowing = false;

void _showDialog() {
  _isDialogShowing = true; // set it `true` since dialog is being displayed
  showDialog(
    context: context,
    builder: (context) {
      return AlertDialog(
        title: Text("Title"),
        actions: <Widget>[
          FlatButton(
            child: Text("CANCEL"),
            onPressed: () {
              _isDialogShowing = false; // set it `false` since dialog is closed
              Navigator.of(context).pop();
            },
          )
        ],
      );
    },
  );
}
Run Code Online (Sandbox Code Playgroud)

要侦听后退按钮,您可以将根小部件包装在其中WillPopScope并相应地处理内容onWillPop()


Has*_*jmi 9

在您的小部件中添加一个关键属性:

 final GlobalKey _alertKey = GlobalKey(); 
Run Code Online (Sandbox Code Playgroud)

然后将密钥分配给您的警报对话框:

AlertDialog(
        key: _alertKey,
        .........
)
Run Code Online (Sandbox Code Playgroud)

然后:

 if (_alertKey.currentContext != null) {
      Navigator.of(context).pop();
  }
Run Code Online (Sandbox Code Playgroud)

意味着如果将 acontext附加到该键,则会显示警报对话框。您可以在无状态和有状态小部件中使用此方法。


小智 6

尝试这个 !!!

Future _dialog;

_checkAndShowDialog() async {

    if (_dialog == null) {
      _dialog = showMyDialog();
      await _dialog;
      _dialog = null;
    } else {
     //do nothing
    }

}

//dialog should return future
Future showMyDialog() {
    return showDialog(
        context: _context,
        child: Container(child: Text("I am dialog"),) );
  }
Run Code Online (Sandbox Code Playgroud)