Flutter:未为 DataSnapshot 类定义 forEach 方法
Posted
技术标签:
【中文标题】Flutter:未为 DataSnapshot 类定义 forEach 方法【英文标题】:Flutter: The method forEach isn't defined for the class DataSnapshot 【发布时间】: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;
);
【问题讨论】:
How to loop through a Firebase datasnapshot sub childrens? 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<dynamic,dynamic>
,那么你可以这样做Map<dynamic, dynamic> 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);
【讨论】:
以上是关于Flutter:未为 DataSnapshot 类定义 forEach 方法的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Firestore 错误:未为“对象”类定义运算符“[]”
Flutter Firestore:未为类“Object?”定义运算符“[]”。 - “对象”来自“飞镖:核心”
在 IntelliJ Idea 中未为 Kotlin @ConfigurationProperties 类生成 spring-configuration-metadata.json 文件