Flutter:在启​​动时显示一个对话框

Posted

技术标签:

【中文标题】Flutter:在启​​动时显示一个对话框【英文标题】:Flutter: showing a dialog at startup 【发布时间】:2021-04-22 03:07:44 【问题描述】:

我现在对 Flutter 已经很熟悉了,但我无法理解这一点。

我想在State<T> 类中的第一次启动时显示一个对话框,其中T 是一个有状态的小部件。该对话框包含一些有关如何使用该应用程序的简短说明。但是在build 方法中执行此逻辑会引发错误,在initState 中与在didChangeDependencies 方法中一样。

那么我可以在哪里(或者更确切地说是什么时候)调用以下逻辑

if(someCondition)
   showDialog(...);

没有出现以下错误

在构建 FutureBuilder(state: _FutureBuilderState#66844) 时抛出了以下断言: 在构建期间调用 setState() 或 markNeedsBuild()。

此 Overlay 小部件无法标记为需要构建,因为 框架已经在构建小部件的过程中。一个小部件可以 仅在以下情况之一被标记为需要在构建阶段构建 它的祖先正在建造中。这个例外是允许的,因为 框架在子级之前构建父级小部件,这意味着 肮脏的后代将永远被建造。否则,框架可能 在此构建阶段不要访问此小部件。其上的小部件 setState() 或 markNeedsBuild() 被称为: 覆盖-[LabeledGlobalKey#27d99] 状态: OverlayState#4aeab(条目:[OverlayEntry#3c67c(不透明:真; 维护状态:假),OverlayEntry#564f9(不透明:假; 维护状态:真),OverlayEntry#7b46b(不透明:假;维护状态: false), OverlayEntry#81c9d(opaque: false; maintainState: true)]) 有问题的调用时当前正在构建的小部件 制作的是:FutureBuilder 状态:_FutureBuilderState#66844

【问题讨论】:

【参考方案1】:

在尝试显示对话框之前确保您的小部件已完全构建

@override
void initState() 
  super.initState();

  WidgetsBinding.instance.addPostFrameCallback((_) 
    showDialog(
      // ...
    );
  );

【讨论】:

谢谢。关于框架还有一些我不知道的事情。

以上是关于Flutter:在启​​动时显示一个对话框的主要内容,如果未能解决你的问题,请参考以下文章

按下热键时显示一个对话框实例

在关闭建议名称时显示 xlworkbook 保存对话框

在 Android 中显示对话框时显示 AppBar

下载文件时显示自定义对话框

运行代码时显示进度对话框的问题

加载时显示 C# 延迟模式对话框,同时允许继续执行