我正在使用flutter应用程序,我想检查警报对话框是否在屏幕上打开。谁能告诉我该怎么做,基本上我想在警报对话框打开和关闭之前和之后做一些事情。
Min*_*rid 46
你可以使用这个方法:
_isThereCurrentDialogShowing(BuildContext context) =>
ModalRoute.of(context)?.isCurrent != true;
Run Code Online (Sandbox Code Playgroud)
小智 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
警报关闭时将运行。
第一件事是您将自己显示对话框。因此,您可以使用一个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()
。
在您的小部件中添加一个关键属性:
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)
归档时间: |
|
查看次数: |
1119 次 |
最近记录: |