firebase - Flutter:没有为类 DataSnapshot 定义 forEach 方法

标签 firebase firebase-realtime-database dart flutter

我需要在 firebase 的 DatabaseReference 中迭代一个节点。但是在 firebase_database 库中的 DataSnapshot 中没有 forEach 函数!

我还尝试使用 firebase 库中的 DataSnapshot 对象(其中有一个 forEach 函数),但出现错误:

[dart] The argument type '(DataSnapshot) → List<dynamic>' can't be assigned to the parameter type '(DataSnapshot) → FutureOr<dynamic>'.

这是我的代码:

getAccountsList() {
  return firebaseDbService.getAccounts().once().then((DataSnapshot snapshot) {
    var list = [];
    snapshot.forEach((DataSnapshot account) => list.add({
      'id': snapshot.key,
      'name': snapshot.child('name').val(),
    }));
    return list;
  });
}

最佳答案

不清楚您在代码中尝试做什么,child(String path)val()类中不存在 DataSnapshot ,你可以在这里查看:

https://github.com/flutter/plugins/blob/master/packages/firebase_database/lib/src/event.dart#L27

你也不能像这样循环:

for( var values in snapshot.value){
 print("Connected to second database and read ${values}");
}

因为你会得到以下错误:

enter image description here

这也意味着您不能使用 forEach()在快照上进行迭代。


假设你有这个数据库,你想得到 names :

user
  randomId
     name: John
  randomId
     name: Peter

您需要执行以下操作:

_db=FirebaseDatabase.instance.reference().child("user");
_db.once().then((DataSnapshot snapshot){
   Map<dynamic, dynamic> values=snapshot.value;
   print(values.toString());
     values.forEach((k,v) {
        print(k);
        print(v["name"]);
     });
 });

此处引用指向节点 users , 自 snapshot.value类型为 Map<dynamic,dynamic>那么你就可以做到这一点Map<dynamic, dynamic> values=snapshot.value; .

然后你在 map 中循环使用 forEach() 为了能够获取键和值,您将获得以下输出:

output

这一行I/flutter ( 2799): {-LItvfNi19tptjdCbHc3: {name: peter}, -LItvfNi19tptjdCbHc1: {name: john}}print(values.toString()); 的输出

以下两行:

I/flutter ( 2799): -LItvfNi19tptjdCbHc3
I/flutter ( 2799): -LItvfNi19tptjdCbHc1

print(k); 的输出

另外两行是print(v["name"]);的输出

添加namesforEach() 中执行以下操作:

list.add(v["name"]);
    print(list);

关于firebase - Flutter:没有为类 DataSnapshot 定义 forEach 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51759155/

相关文章:

ios - 如何从 Firebase 引用中获取第一层的 child ? (浅查询)

flutter - Flutter应用会丢弃java.lang.UnsatisfiedLinkError(找不到 “libflutter.so”)Flutter( channel 未知,v1.12.13 + hotfix.9)

list - Dart组中的项目列表变成了不同的数据结构?

ios - dyld:库未加载Xcode11

java - collectionGroup() 不是公开的。无法从外部包访问

java - Datasnapshot HashMap 不能转换为另一个类

ios - Mapview委托(delegate)函数在关闭包含mapview的 View Controller 后继续运行

firebase - 在哪里检查 Firebase 实时数据库位置(美国、欧盟或亚洲)

java - 使用 firebase 实时数据库,我的条目约为 300 项。现在在 datasnapshot 中没有得到 firebase 的响应

networking - 没有互联网时 Flutter 中的 gRPC 崩溃