flutter - 导航后打开颤振对话框
问题描述
我调用 Navigator pushReplacement 在我的 Flutter 应用程序中显示一个新视图,并希望立即弹出一个简单的对话框来向用户介绍该页面。(我希望用户能够在后台看到新视图)
如果我在小部件的 build 方法中调用 showDialog,然后随后从 build 方法返回一个小部件(脚手架),我会收到错误消息,指出颤动已经在绘制小部件。我希望我需要监听构建完成事件,然后调用 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()
上下文尚未创建,因此您必须在第一帧布局后推迟其使用。然后它是可用的。
推荐阅读
- javascript - 如何在 Angular 9 中从子组件访问父组件
- vba - 如何在 Powerpoint 中获取录制声音的长度
- java - 如何在Java中对泰语字符串数组进行排序
- html - CSS - 平滑扩展按钮宽度并在悬停时显示文本
- jenkins - SONAR 与 Jenkins 的集成。错误:您无权运行分析。请联系项目管理员
- android - 位图在Android中减少高度和宽度
- python - 属性错误模块“时间”没有属性“时钟”(pyqt5)
- javascript - 如何在 d3 version4 的原始源中添加 y0 和 y1 值?
- camunda - 将变量传递给 url 从服务任务到另一个
- python - 如何有效地将 Python 结构转换为 serde_json::Value?