我想显示基于条件的警报对话框。而不是基于用户交互,如按钮按下事件。
如果在应用程序状态数据中设置了标志,则显示警报对话框,否则不显示。
下面是我想要显示的警报对话框示例
void _showDialog() {
// flutter defined function
showDialog(
context: context,
builder: (BuildContext context) {
// return object of type Dialog
return AlertDialog(
title: new Text("Alert Dialog title"),
content: new Text("Alert Dialog body"),
actions: <Widget>[
// usually buttons at the bottom of the dialog
new FlatButton(
child: new Text("Close"),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
我试图在主屏幕小部件的build方法中调用该方法,但它给我错误-
The context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator widget.
E/flutter ( 3667): #0 Navigator.of.<anonymous closure> (package:flutter/src/widgets/navigator.dart:1179:9)
E/flutter ( 3667): #1 Navigator.of (package:flutter/src/widgets/navigator.dart:1186:6)
E/flutter ( 3667): #2 showDialog (package:flutter/src/material/dialog.dart:642:20)
问题是我不知道应该从哪里调用_showDialog方法?
6条答案
按热度按时间to94eoyn1#
必须将内容 Package 在另一个
Widget
(最好是Stateless)中。注:请参阅此处了解
Future.delayed(Duration.zero,..)
内的 Package 显示警报bhmjp9jg2#
只需覆盖
initState
并在Future
或Timer
中调用_showDialog
方法:mqkwyuun3#
我会把它放在
State
的initState
中(StatefulWidget
的initState
中)。将其放在
Stateless
小部件的build
方法中很有吸引力,但这将多次触发警报。在下面的示例中,当设备未连接到Wifi时,它会显示警报,如果未连接,则会显示[重试]按钮。
dm7nw8vv4#
这就是我如何用一种简单的方式实现这一点:
1.添加https://pub.dev/packages/shared_preferences
1.在主屏幕(或任何所需小部件)的构建方法上方:
1.然后在微件的initState上:
这确保了函数在构建小部件之后运行。
4c8rllxm5#
我用Flutter社区开发的软件包解决了这个问题。这里https://pub.dev/packages/after_layout
将此添加到您的pubspec.yaml
并尝试以下示例
mbskvtky6#
如果您正在使用块,请使用@mirkancal在此答案中建议的
BlocListener
:Flutter:块,如何显示警报对话框