【问题标题】:Flutter: The method forEach isn't defined for the class DataSnapshotFlutter:未为 DataSnapshot 类定义 forEach 方法
【发布时间】:2019-01-16 10:54:58
【问题描述】:

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

我还尝试使用 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;
  });
}

【问题讨论】:

标签: firebase firebase-realtime-database dart flutter


【解决方案1】:

不清楚您要在代码中做什么,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}");
}

因为你会得到以下错误:

这意味着您也不能在快照上使用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&lt;dynamic,dynamic&gt;,那么你可以这样做Map&lt;dynamic, dynamic&gt; values=snapshot.value;

然后你在map 内部循环使用forEach() 来获取键和值,你会得到以下输出:

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"]);的输出

要将names 添加到列表中,请在forEach() 中执行以下操作:

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

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 1970-01-01
    • 2019-08-14
    • 2021-11-16
    • 1970-01-01
    • 2021-08-21
    • 2017-06-23
    • 2020-01-28
    • 2022-11-03
    相关资源
    最近更新 更多