You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FlutterFire Realtime Database子节点提取为动态列表取值问题

问题根因

直接调用entry.add(snapshot.value)会把查询到的Categories节点下的整包数据作为单个元素存入列表。Realtime Database返回的多子节点数据本质是Map<dynamic, dynamic>类型的键值对集合,直接add整个Map就会出现所有key、value被打包成列表单个元素的情况,和你日志输出的表现完全一致。

修复代码

只需要遍历返回的Map集合,单独提取每个子节点的value存入列表即可,修改后的完整实现如下:

Future<dynamic> getdata() async { 
  final ref = FirebaseDatabase.instance.ref("Categories");
  final snapshot = await ref.get();
  if (snapshot.exists) {
    // 将返回值强转为键值对格式
    final categoryMap = snapshot.value as Map<dynamic, dynamic>;
    // 先清空列表避免重复加载时数据冗余
    entry.clear();
    // 遍历所有子节点,仅提取value存入列表
    categoryMap.forEach((key, value) {
      entry.add(value);
    });
    print(entry);
    // 如果是在StatefulWidget中使用,需要在此处调用setState触发UI重绘
  } else {
    print('No data available.');
  } 
}
late List<dynamic> entry =[];
运行效果

修改后打印的列表数据格式为纯值集合:

[deneme, deneme1, deneme2, deneme3]

后续直接通过entry.length就能获取总数据量,遍历entry列表即可生成对应数量的展示块,不会再出现所有数据挤在同一个块的问题。

内容的提问来源于stack exchange,提问作者samsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 04:48:17