Firebase 使用flatter从firestore检索数据,其中每个文档具有不同数量的字段
我正在使用Flutter(我是一个Flutter新手,所以如果这是一个愚蠢的问题,请原谅)构建一个应用程序,我的应用程序的一个基本功能是待办事项列表。问题是,这个应用程序既有老年人界面,也有看护人界面,因此,每个任务都由看护人分配并存储到firebase,老年人只需看到任务即可。因此,我这样做的方式是,每个管理员的userid是文档的docid,其中存储了所有针对老年人的任务。问题是每个文档都有不同数量的字段,而字段名实际上并不重要。例如,那天我可能只给妈妈2个任务,而其他人可能给他们的爸爸6个任务。我正在使用streambuilder,但我需要一种方法,一旦找到文档(使用Uid),我就可以检索所有字段,并使每个字段成为复选框。我不能硬编码和输入Firebase 使用flatter从firestore检索数据,其中每个文档具有不同数量的字段,firebase,flutter,firebase-realtime-database,google-cloud-firestore,Firebase,Flutter,Firebase Realtime Database,Google Cloud Firestore,我正在使用Flutter(我是一个Flutter新手,所以如果这是一个愚蠢的问题,请原谅)构建一个应用程序,我的应用程序的一个基本功能是待办事项列表。问题是,这个应用程序既有老年人界面,也有看护人界面,因此,每个任务都由看护人分配并存储到firebase,老年人只需看到任务即可。因此,我这样做的方式是,每个管理员的userid是文档的docid,其中存储了所有针对老年人的任务。问题是每个文档都有不同数量的字段,而字段名实际上并不重要。例如,那天我可能只给妈妈2个任务,而其他人可能给他们的爸爸6个
return ListView(
children: snapshot.data.docs.map((document) {
return Center(
child: Container(
height: MediaQuery.of(context).size.height / 6,
width: MediaQuery.of(context).size.width / 1.2,
child: Text(document['task1'])),
);
}).toList(),
);
因为即使字段名是已知的,字段的数量也是未知的。上面的行适用于包含1个任务的待办事项列表,但仅此而已。
另外,我可以找出复选框部分,为了简单起见,我只是返回一个文本小部件。
先谢谢你。
由于
文档
是映射
对象,因此可以使用映射
类的属性。它获取映射中的每个键值对
您可以将代码更新为:
return ListView(
children: snapshot.data.docs.map((document) {
return Center(
child: Column(
children: document.data().entries
.map((mapEntry) => Container(
height: MediaQuery.of(context).size.height / 6,
width: MediaQuery.of(context).size.width / 1.2,
child: Text(mapEntry.value)))
.toList(),
));
}).toList(),
);
这将遍历文档中的键值对
,将每个值映射到文本小部件中,然后将它们放在列表中
。
然后将此列表传递到列
条目关键字显示为错误
我移动了.map((mapEntry)…顶部有条目,但没有修复,它只是自动格式化回这个状态。您好,可以安全地假设您的所有文档都命名为task1
、task2
、task3
等。另外,请发布您的数据库结构。完成!请查看身份验证数据库和两个示例用户文档。您能签出我发布的答案吗o看看这是否适用于您?我收到一个错误,没有为QueryDocumentSnapshot和toList()类型定义“条目”没有为“Container”类型定义,我按原样粘贴了您的代码,但这是delimeter错误。请查看下图。现在查看。我已经编辑了代码。这应该可以修复错误。entries关键字显示为错误,您能看到问题是什么吗。很抱歉,我是一个新手,所以我还不能找出那么多错误。我更新了我的回答显示了错误的图片。您好,我已将document.data.entries更改为document.data().entries。这应该可以修复错误。