在 Flutter 中使用异步方法后,我的 FutureBuilder 的快照没有任何数据
My FutureBuilder's snapshot doesn't have any data after async method in Flutter
我写了一个列表: List<ListClass> listItems;
,我想向它推送一些数据并在页面上显示这个列表
使用这种异步方法:
return Future.delayed(delayTime).then((_) async {
CollectionTable().getIndexList().then((value) {
listItems=value;
print("length="+listItems.length.toString());
});
});
}
getIndexList()方法也是一个异步方法,像这样:
Future<List<ListClass>> getIndexList() async {
listItems.clear();
await listCollection.get().then((value){
var v = value.data;
for (var data in v) {
listItems.add(ListClass(...);}
});
return listItems;
}
第一个 futureBuilder:
return FutureBuilder<Object>(
future: initHomeList(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
print(snapshot);
if(snapshot.hasData){
EasyLoading.dismiss();
return Scaffold(
//showing data
);
}
else{
//loading
EasyLoading.show(status: 'loading...');
return Container();
}
},
);
但是当我调试时,这个过程经历了两次snapshot
,第一次显示AsyncSnapshot<Object>(ConnectionState.waiting, null, null)
第二个显示AsyncSnapshot<Object>(ConnectionState.done, null, null)
,但snapshot.hasdata
是错误的。
(上面两次打印时,没有经过getIndexList
方法,列表为null。
我继续,列表正确获取数据,但是程序跳转到了我不知道的地方(我使用step over),程序还在运行?我想。
谁能帮我修改我的代码?我想在获取数据后显示页面,谢谢!!
我认为您不会return从任何地方获取未来的结果。
您能否尝试像这样更改您的代码 - 这包括将数据传递到您的快照的 return 语句。
return Future.delayed(delayTime).then((_) async {
CollectionTable().getIndexList().then((value) {
listItems=value;
print("length="+listItems.length.toString());
// add this
return value;
});
});
如果您想从代码中删除 'print',只需使用它即可。
return Future.delayed(delayTime).then((_) async {
return CollectionTable().getIndexList();
});
我写了一个列表: List<ListClass> listItems;
,我想向它推送一些数据并在页面上显示这个列表
使用这种异步方法:
return Future.delayed(delayTime).then((_) async {
CollectionTable().getIndexList().then((value) {
listItems=value;
print("length="+listItems.length.toString());
});
});
}
getIndexList()方法也是一个异步方法,像这样:
Future<List<ListClass>> getIndexList() async {
listItems.clear();
await listCollection.get().then((value){
var v = value.data;
for (var data in v) {
listItems.add(ListClass(...);}
});
return listItems;
}
第一个 futureBuilder:
return FutureBuilder<Object>(
future: initHomeList(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
print(snapshot);
if(snapshot.hasData){
EasyLoading.dismiss();
return Scaffold(
//showing data
);
}
else{
//loading
EasyLoading.show(status: 'loading...');
return Container();
}
},
);
但是当我调试时,这个过程经历了两次snapshot
,第一次显示AsyncSnapshot<Object>(ConnectionState.waiting, null, null)
第二个显示AsyncSnapshot<Object>(ConnectionState.done, null, null)
,但snapshot.hasdata
是错误的。
(上面两次打印时,没有经过getIndexList
方法,列表为null。
我继续,列表正确获取数据,但是程序跳转到了我不知道的地方(我使用step over),程序还在运行?我想。
谁能帮我修改我的代码?我想在获取数据后显示页面,谢谢!!
我认为您不会return从任何地方获取未来的结果。 您能否尝试像这样更改您的代码 - 这包括将数据传递到您的快照的 return 语句。
return Future.delayed(delayTime).then((_) async {
CollectionTable().getIndexList().then((value) {
listItems=value;
print("length="+listItems.length.toString());
// add this
return value;
});
});
如果您想从代码中删除 'print',只需使用它即可。
return Future.delayed(delayTime).then((_) async {
return CollectionTable().getIndexList();
});