变量没有被改变到 flutter 的范围之外
variable not being changed out of then scope in flutter
我有一个 Future 列表和对象列表,我正在使用“.then”访问 Future 列表,并且在同一范围内我正在将对象添加到对象列表中。这是代码:
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 长度为 printng '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());
}
then
范围外的打印语句在then
块内的打印语句之前执行。这就是前者将列表打印为空的原因。
这是因为 then
块等待 Future
解析,然后才执行其中的代码。同时,它之外的打印已经执行。
我有一个 Future
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 长度为 printng '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());
}
then
范围外的打印语句在then
块内的打印语句之前执行。这就是前者将列表打印为空的原因。
这是因为 then
块等待 Future
解析,然后才执行其中的代码。同时,它之外的打印已经执行。