Flutter:在Firebase中读取大量节点

时间:2018-12-19 15:23:44

标签: firebase firebase-realtime-database flutter

我尝试从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;
  }

结果:

它与某些测​​试数据一起很好地工作。示例:

enter image description here

enter image description here

但是,如果我尝试读取90个节点,例如:

enter image description here

结果:

  

(dynamic)=> void'不是'(dynamic,dynamic)=>类型的子类型   'f

无效

enter image description here

有什么主意吗?


我发现,如果密钥例如:

  

-LU645_UgPbGZhBsneOq

(由云函数使用.push()。set()自动生成)

然后它不起作用。

  

更多详细信息:如果密钥不是数字,则无效

enter image description here

为什么?

1 个答案:

答案 0 :(得分:0)

如果使用push给出的节点名,则Once()。value返回的值是一个Map。因此,要使用foreach对其进行迭代,需要一个函数使用两个参数而不是一个参数(这正是错误消息告诉您的内容):

response.value.forEach((动态键,动态v)=> urls.add(v))

这应该在url中为您提供带有“名称”和“ url”键的地图列表。 foreach函数中的参数“ key”将是包含名称和url的节点名称。

为什么单值foreach函数可用于数字节点名称?如果分配数字节点名称,firebase会将这些节点作为数组返回。由于样本树缺少“ 0”节点,因此您将“ null”作为数组的第一个元素。