我调用 Navigator pushReplacement 在我的 Flutter 应用程序中显示一个新 View ,并希望立即弹出一个简单的对话框来向用户介绍该页面。 (我希望用户能够在后台看到新 View )
如果我在小部件的 build 方法中调用 showDialog,然后从 build 方法返回一个小部件(脚手架),我会收到错误消息,指出 flutter 已经在绘制小部件。我希望我需要监听构建完成事件,然后调用 showDialog。
非常感谢有关如何做到这一点的指导。
最佳答案
您可以从“initState()”内部调用该对话框,在绘制第一帧后延迟其外观。
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
await showDialog<String>(
context: context,
builder: (BuildContext context) => new AlertDialog(
title: new Text("title"),
content: new Text("Message"),
actions: <Widget>[
new FlatButton(
child: new Text("OK"),
onPressed: () {
Navigator.of(context).pop();
},
),
],
),
);
});
}
context
变量在 State
类中始终可用。它指向这个小部件的 RenderObject
。问题是在 initState()
中,上下文尚未创建,因此您必须在第一帧布局后推迟其使用。然后就可以使用了。
https://stackoverflow.com/questions/50806031/