flutter - 如何将 QueryDocumentsnapshots 的实例转换为列表 - Flutter、Firestore
问题描述
我在我的项目中有点卡住,以了解更多关于颤振的信息,希望你能帮助我或给我一些讲座的建议:)
我的 Firestore 数据库中有两个集合 - 一个用户和一个组集合。
在我的用户文档中,我有一个包含一些组 ID 的数组。Groups 集合也非常简单——只有一些具有唯一 ID 的集合,并且作为字段只有名称和描述。
现在我想要一个包含我所有组的列表,用户是其成员 - 所以我必须获取一个包含组 ID 的列表,然后查询数据库以获取此 ID 的所有组数据
到目前为止,我正在取回组 ID 和组的正确数据。但是如何将这些数据映射到 Listview 的列表中呢?
我的代码 - _buildBody 在主体的脚手架内被调用。
Widget _buildBody() {
User _currentUser = FirebaseAuth.instance.currentUser;
DocumentReference docRef = FirebaseFirestore.instance.collection('user').doc(_currentUser.uid);
return StreamBuilder(
stream: docRef.snapshots(),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if(snapshot.hasError){
return Error();
}
if(snapshot.connectionState == ConnectionState.waiting){
return Loading();
}
//Get all my Group Ids
final List<dynamic> documents = snapshot.data.get('groups');
Future<List<Map>> _groups = getGroups(documents);
//return ListView with Data
return ListView(...);
}
);
Future <List<Map<dynamic, dynamic>>> getGroups(List<dynamic> documents) async{
List<QueryDocumentSnapshot> group_docs;
List<Map<dynamic, dynamic>> list = new List();
QuerySnapshot collectionSnapshot = await FirebaseFirestore.instance.
collection('groups').where('id', whereIn: documents).get();
//Now I have all QueryDocumentSnapshots as a instance inside the list
group_docs = collectionSnapshot.docs;
//What now?! :D
return list;
}
非常感谢。
解决方案
它可以如下:
List<Map<dynamic, dynamic>> list = [];
list = snapshot.docs.map((doc) => doc.data() ).toList();
提示:您还可以看到,我修改了您的 List 类实例。当然,它不会影响答案,但我建议您习惯以这种方式实例化列表。
推荐阅读
- selenium - 使用 Selenium 绕过 Youtube Login + reCaptcha
- python-3.x - 验证从 JQuery AJAX 到后端烧瓶 API 的标头/数据字段的问题
- mysql - 增加组 mySQL 的行号
- python - Ref 不适用于我的设置
- regex - 正则表达式在最后一个冒号之后提取第一个单词,没有空格并且完全匹配
- python - 用图像替换 x 轴刻度标签
- garbage-collection - Chez Scheme 中是否对已编译/评估过的程序的内存进行了垃圾收集?
- node.js - 如何在地址栏中保留查询字符串,同时避免在提交表单时重定向?
- docker - 在 Alpine 容器内创建 unix 套接字以连接 Gunicorn 和 Nginx
- python - 使用 Keras 将 (None, None, 2) 减少到 (None,2)