Fetch await future data в initState Flutter дает нулевое значение - PullRequest
0 голосов
/ 18 июня 2020

Попытка получить данные в initState с использованием async / await каждый раз дает нулевое значение. Как я могу установить значение после завершения ожидания

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;
}

getCar Делает выборку данных из Api. Но на это нужно время и этого не дождаться. Как я могу убедиться, что у него есть данные перед использованием, или исправить эту проблему другим способом

1 Ответ

1 голос
/ 19 июня 2020

Строка ниже:

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

должна быть в обратном вызове then (), иначе не определено c, будет ли он выполняться до или после:

_makesList = result;

Другими словами, код после convertFutureMakes (). Then () выполняется до , вызывается обратный вызов then () и поэтому нет значения. На самом деле значения никогда не будет.

Попробуйте:

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