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
相关产品推荐
相关产品推荐

