我尝试从Firebase读取数据,但不适用于大量节点,
这是我尝试过的:
Future<int> test() async {
final response = await FirebaseDatabase.instance.reference().child('...').once();
var urls=[];
response.value.forEach((v) => urls.add(v));
print(urls);
return urls.length;
}
结果:
它与某些测试数据一起很好地工作。示例:
但是,如果我尝试读取90个节点,例如:
结果:
(dynamic)=> void'不是'(dynamic,dynamic)=>类型的子类型 'f
无效
有什么主意吗?
新
我发现,如果密钥例如:
-LU645_UgPbGZhBsneOq
(由云函数使用.push()。set()自动生成)
然后它不起作用。
更多详细信息:如果密钥不是数字,则无效
为什么?
答案 0 :(得分:0)
如果使用push给出的节点名,则Once()。value返回的值是一个Map。因此,要使用foreach对其进行迭代,需要一个函数使用两个参数而不是一个参数(这正是错误消息告诉您的内容):
response.value.forEach((动态键,动态v)=> urls.add(v))
这应该在url中为您提供带有“名称”和“ url”键的地图列表。 foreach函数中的参数“ key”将是包含名称和url的节点名称。
为什么单值foreach函数可用于数字节点名称?如果分配数字节点名称,firebase会将这些节点作为数组返回。由于样本树缺少“ 0”节点,因此您将“ null”作为数组的第一个元素。