【发布时间】:2021-07-25 01:01:58
【问题描述】:
我有一些代码需要在我的initState() 方法中运行,因为它会在构建方法中初始化一个后期变量小部件依赖。问题是我要运行的方法是异步的,因为我正在使用 Shared Preferences 包从磁盘加载数据。我尝试使该方法异步,但我的 IDE 中出现错误,指出 initState() 方法不能是异步的。我尝试查找解决方案,他们说您可以运行它们而无需等待 initState() 方法。我试过这个,但问题是它没有等待初始化,所以我得到红色错误屏幕,说变量尚未初始化。我原本打算在处理数据的自定义类的构造函数中运行它,但我也收到一个错误,说构造函数方法不能是异步的。
我的 IDE 建议使用 didChangeDependencies(),因为它可以是异步的,但是构建方法不会等待它。
我尝试了这个问题 (Is there a way to load async data on InitState method?) 中没有建议 StreamBuilder 的所有答案,因为我没有尝试加载与身份验证有关的流。我还尝试在代码等前后更改调用super.initState();的顺序,但没有奏效。
【问题讨论】:
-
该链接包含如何使用 FutureBuilder 的示例。没有办法拥有异步 initState(或其他 init)方法,您必须在小部件中处理异步。
-
@nvoigt 除了 initState 方法之外,还有其他方法可以运行一些初始化代码吗?我有一个需要从小部件所依赖的磁盘加载的变量。我不需要特别使用 initState 只需要让构建方法等待一个变量加载。感谢您的帮助。
-
@nvoigt 使用 FutureBuilder 工作,我仍然得到一个异常但应用程序中没有红屏。异常是一个问题还是你知道我该如何解决它?我得到的例外是 late 变量尚未初始化。
-
好吧,你不能让它“迟到”,这应该消除异常。
-
好的,感谢您的帮助!
标签: flutter dart asynchronous async-await