我有一个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());
}