Flutter如何读取Firestore中字段数量不固定的文档全部数据?
实现思路
Firebase Firestore 的 DocumentSnapshot 调用data()方法后会返回Map<String, dynamic>类型的对象,包含当前文档的全部字段键值对,直接遍历该Map即可动态获取所有字段,无需硬编码字段名。
适配后的代码示例
return ListView( children: snapshot.data.docs.map((document) { // 将文档内容转为Map,获取全部字段键值对 Map<String, dynamic> allTasks = document.data() as Map<String, dynamic>; // 遍历所有键值对生成对应组件 return Column( children: allTasks.entries.map((taskItem) { // taskItem.key为字段名,taskItem.value为对应任务内容 return Center( child: Container( height: MediaQuery.of(context).size.height / 6, width: MediaQuery.of(context).size.width / 1.2, // 此处可直接替换为你自定义的勾选框组件 child: Text(taskItem.value.toString()), ), ); }).toList(), ); }).toList(), );
可选存储结构优化建议
你当前将所有任务存为单文档独立字段的方案,会受限于Firestore单文档1MB的存储上限,且后续修改任务状态、删除任务时操作复杂度更高。可以调整为:以看护人uid为父文档ID,父文档下新建daily_tasks子集合,每个任务对应子集合中的一个独立文档,字段固定为content(任务内容)、is_completed(完成状态)等,后续查询和操作会更灵活。
内容的提问来源于stack exchange,提问作者Devi Suresh
相关产品推荐
相关产品推荐

