(Flutter / Dart) Два асинхронных метода в initState не работают - PullRequest
0 голосов
/ 21 июня 2019

У меня есть function в моем initState:

  @override
      void initState() {
       _fetchListItems();
        super.initState();
      }

Это function очень просто. У него есть две async await операции sqflite, одна из которых ожидает завершения другой:

 _fetchListItems() async {
       wait() async {
         number = await db.getNumber(userId); }

       await wait();
     List rawFavouriteList = await db.getList(number);

      setState((){
      rawFavouriteList.forEach((item){
           _favouriteList.add(Model.map(item));
               }}); 
 }

Я должен ждать получения number, только тогда я могу получить сериализованный List, который затем десериализуется и заполняется, а затем добавляется к List, который отображается в ListView.

Проблема в том, что это не работает в initState. Работает нормально, когда вызывается через onPressed() кнопки, но не в initState.

Примечания:

1) Ошибка не выдается

2) Я уже пробовал более консервативные альтернативы, используя await для четного rawFavouriteList через отдельную функцию, такую ​​как wait(), прежде чем использовать setState() top, чтобы заполнить _favouriteList, хотя он работает нормально вручную с помощью кнопок .

3) Все работает нормально, если я вручную ввожу значение number во второй запрос к базе данных и просто удаляю первый запрос, т.е.

_fetchListItems() async {
      List rawFavouriteList = await db.getList(42);
  setState((){
  rawFavouriteList.forEach((item){
       _favouriteList.add(Model.map(item));
           }}); 
  }
...