我想从Firebase数据库快照返回一个“将来列表”,这是我的代码,但是我无法使其正常工作:

Future<List<CocheDetailItem>> getCoches(ids) async {
  List<CocheDetailItem> coches = [];
  final dbRef = FirebaseDatabase.instance.reference().child('17082019');
  for (var i = 0; i < ids.length; i++) {
    var id = ids[i];
    dbRef.child(id).once().then((DataSnapshot snapshot) {
      if (snapshot.value != null) {
        Map<dynamic, dynamic> jsres = snapshot.value;
        CocheDetailItem coche = CocheDetailItem.fromJson(jsres);
        coches.add(coche);
      }
    });
    print('here is i ${ids[i]} ');
  }
  return coches;

}

我得到的返回是空的区域。有人可以帮我吗?

最佳答案

注意,dbRef.child(id).once();是一个异步函数,因此您必须等待它结束才能获取数据。使用await关键字可以做到这一点。

Future<List<CocheDetailItem>> getCoches(ids) async {
      List<CocheDetailItem> coches = [];
      final dbRef = FirebaseDatabase.instance.reference().child('17082019');
      for (var i = 0; i < ids.length; i++) {
        var id = ids[i];
        var dataSnapshot = await dbRef.child(id).once();
          if (dataSnapshot.value != null) {
            Map<dynamic, dynamic> jsres = dataSnapshot.value;
            CocheDetailItem coche = CocheDetailItem.fromJson(jsres);
            coches.add(coche);
          }
        print('here is i ${ids[i]} ');
      }
      return coches;
    }

09-03 20:39