0

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

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

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

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

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

4

1 回答 1

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);
     });
   });
于 2020-06-18T22:19:31.937 回答