在initState中获取数据以等待将来的数据Flutter提供了空值

时间:2020-06-18 19:36:39

标签: flutter dart flutter-widget

尝试使用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获取数据。但是,这需要一些时间,并且它不会等待。如何确保使用前有数据或以其他方式解决该问题

1 个答案:

答案 0 :(得分: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);
     });
   });