переменная не изменяется вне области видимости во флаттере - PullRequest
3 голосов
/ 07 августа 2020

У меня есть список Future и список объектов, я обращаюсь к списку Future с помощью '.then', и в той же области я добавляю объекты в список объектов . Это код:

   List<Etablissement> etablist = new List<Etablissement>() ;
   //AfficherEtablissement() returns Future<dynamic>
    etabController.AfficherEtablissement().then((value) =>
    value.forEach((entry) {
      int id = entry["id"];
      Etablissement et = new Etablissement(id);
      this.etablist.add(et) ;
      print("etablist length inside the loop "+etablist.length().toString());
    })
    ) ;
      print("etablist length outside the loop "+etablist.length().toString());

длина etablist внутри l oop - это printitng '2', поэтому в список добавляются объекты, но вне области l oop он пуст, как будто ничего не имеет добавлено.

Ответы [ 2 ]

2 голосов
/ 07 августа 2020

then - это вызов async, который не вызывается последовательно, поэтому второй оператор печати не дает длину

используйте:

@override
  void initState() {
    super.initState();
    asyncInitState(); // async is not allowed on initState() directly
  }

  void asyncInitState() async {
     var value = await etabController.AfficherEtablissement();
    value.forEach((entry) {
      int id = entry["id"];
      Etablissement et = new Etablissement(id);
      this.etablist.add(et) ;
      print("etablist length inside the loop "+etablist.length().toString());
    }) 
      print("etablist length outside the loop "+etablist.length().toString());
  }
0 голосов
/ 07 августа 2020

Оператор печати за пределами области then выполняется перед оператором печати внутри блока then. По этой причине первый выводит список как пустой.

Это потому, что блок then ожидает разрешения Future и только после этого выполняет код внутри него. Тем временем печать, которая находится за ее пределами, уже выполнена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...