【问题标题】:Fetch await future data in initState Flutter gives null value在 initState Flutter 中获取 await 未来数据给出空值
【发布时间】:2020-10-08 23:42:40
【问题描述】:

尝试使用 async/await 在 initState 中获取数据每次都会给出空值。等待完成后如何设置值

void initState() {
   convertFutureMakes().then((result) {
     setState(() {
       _makesList = result;
     });
   });
   CarMake brand = _makesList.firstWhere((obj)=>obj.name == make);
   super.initState();
}

_makesList 始终为 null,因此当我使用该列表时它会出错。这是 convertFutureMakes 方法

convertFutureMakes() async{
  List<CarMake> makes = await getCarMakes();
  return makes;
}

getCarMakes 从 Api 获取数据。但这需要一些时间,而且它不会等待。如何在使用前确保它有数据或以其他方式解决该问题

【问题讨论】:

  • convertfututmremakes 函数中的 make 返回值是什么?
  • @proversion 对象列表(CarMake)
  • 如果您收到一个 Json 对象,您可以使用 Future 构建器并传递快照条件,例如 hasData/error 等。有选择地构建小部件或任何相关的东西。如果您需要帮助,请分享 Json 文件示例/模板

标签: flutter dart flutter-widget


【解决方案1】:

下面一行:

CarMake brand = _makesList.firstWhere((obj)=>obj.name == make);

需要在then()回调中,否则不确定是在之前还是之后执行:

_makesList = result;

换句话说,convertFutureMakes().then() 之后的代码运行之前 then() 回调被调用,这就是没有价值的原因。实际上,永远不会有价值。

试试:

 convertFutureMakes().then((result) {
     setState(() {
       _makesList = result;
       CarMake brand = _makesList.firstWhere((obj)=>obj.name == make);
     });
   });

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 2021-11-29
  • 2018-09-02
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2019-12-01
相关资源
最近更新 更多