首页 > 解决方案 > 如何在 initState() 中等待异步初始化代码

问题描述

我有一些代码需要在我的initState()方法中运行,因为它初始化了构建方法中依赖的后期变量小部件。问题是我要运行的方法是异步的,因为我正在使用Shared Preferences包从磁盘加载数据。我尝试使该方法异步,但在我的 IDE 中出现错误,指出该initState()方法不能是异步的。我尝试查找解决方案,他们说您可以运行它们而无需等待initState()方法。我试过这个,但问题是它没有等待初始化,所以我得到红色错误屏幕,说变量尚未初始化。我最初打算在处理数据的自定义类的构造函数中运行它,但我也收到一个错误,说构造函数方法不能是异步的。

我的 IDE 建议使用它,didChangeDependencies()因为它可以是异步的,但是,构建方法不会等待它。

我尝试了这个问题中的所有答案(Is there a way to load async data on InitState method?)这并没有建议,StreamBuilder因为我没有尝试加载与身份验证有关的流。我还尝试更改super.initState();代码之前和之后的顺序调用等,但没有奏效。

标签: flutterdartasynchronousasync-await

解决方案


创建一个异步函数并在其中执行异步工作..然后在 initState 中调用它而不使用 async await 关键字,但就像这样

 @override
  void initState() {
    checkLoggedIn().then((user) {
    
     // do anything with your data here
   
    });
    super.initState();
  }

推荐阅读