【问题标题】:Flutter: read large number of nodes in FirebaseFlutter:在 Firebase 中读取大量节点
【发布时间】:2019-05-20 03:00:51
【问题描述】:

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

的无效'

有什么想法吗?


我发现如果key是例如:

-LU645_UgPbGZhBsneOq

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

那就不行了。

更多细节:如果键不是数字,那么它不起作用

为什么?

【问题讨论】:

  • home.dart ,第 233 行,那是什么?
  • 第 233 行:response.value.forEach((v) => urls.add(v));
  • 如果我将孩子从“product/1/1/images”(内部数据由云 fnt 填充)更改为“product/1/1/test”,那么它可以正常工作,很奇怪。 ...
  • 我发现如果key是-LU645_UgPbGZhBsneOq 那么它不起作用....为什么???有什么想法吗?
  • 里面有什么数据 -> -LU645_UgPbGZhBsneOq ?粘贴屏幕截图

标签: firebase firebase-realtime-database flutter


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 2018-09-22
    • 2017-11-18
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多