首页 > 解决方案 > 导航后打开颤振对话框

问题描述

我调用 Navigator pushReplacement 在我的 Flutter 应用程序中显示一个新视图,并希望立即弹出一个简单的对话框来向用户介绍该页面。(我希望用户能够在后台看到新视图)

如果我在小部件的 build 方法中调用 showDialog,然后随后从 build 方法返回一个小部件(脚手架),我会收到错误消息,指出颤动已经在绘制小部件。我希望我需要监听构建完成事件,然后调用 showDialog。

关于如何做到这一点的指导非常感谢。

标签: flutter

解决方案


您可以从“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()上下文尚未创建,因此您必须在第一帧布局后推迟其使用。然后它是可用的。


推荐阅读