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:在启动时显示一个对话框的主要内容,如果未能解决你的问题,请参考以下文章