我有一个Future 列表和对象列表,我使用'.then'访问Future 列表,并且在同一范围内,我将对象添加到Objects列表中。这是代码:

   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长度为prinitng'2',因此将对象添加到列表中,但是在循环范围之外,该对象为空,因为未添加任何内容。

最佳答案

then是一个async调用,未按顺序调用,因此第二个print语句未给出长度
使用:

@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());
  }

10-08 14:55