页面完成初始化时显示对话框

Show dialog when the page finish init

我想在推送页面时显示对话框。所以我在 initState:

中显示对话框
class _Page2State extends State<_Page2> {
  @override
  void initState() {
    super.initState();
    _showDialog(context: context);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(color: Colors.red),
    );
  }
}

void _showDialog({required BuildContext context}) {
  showCupertinoModalPopup(
    context: context,
    builder: (context) {
      return Container(
        width: 300,
        height: 100,
        color: Colors.green,
      );
    },
  );
}

不足为奇,错误显示:

dependOnInheritedWidgetOfExactType<_InheritedCupertinoTheme>() or dependOnInheritedElement() was called before _Page2State.initState() completed.

为了解决这个问题,我更改了代码:

@override
void initState() {
  super.initState();
  WidgetsBinding.instance?.addPostFrameCallback((timeStamp) {
    _showDialog(context: context);
  });
}

有效。但是不知道有没有更优雅的方式呢?

使用 WidgetsBinding.instance?.addPostFrameCallback 时,您在完成初始化后显示对话框。

addPostFrameCallback: Schedule a callback for the end of this frame.

你可以查看上一个问题

  • Flutter showDialog(context) in initState method