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