如何从Firebase获取Future<DocumentSnapshot<List<Object>>>类型返回值
问题分析
你当前的代码有两个核心错误:
- 返回类型定义错误:单文档查询才会返回
DocumentSnapshot,对集合执行条件查询返回的是QuerySnapshot类型 - 不需要把
List<Event>嵌套在Snapshot里作为返回值,你可以直接把查询到的所有Event文档数据拼装成列表返回
正确实现代码
// 首先修改返回值类型为Future<List<Event>> Future<List<Event>> getAllUserEvents(String uid) async { // 执行条件查询,加了withConverter后返回的是QuerySnapshot<Event> final querySnapshot = await _events .withConverter<Event>( fromFirestore: (snapshot, _) => Event.fromJson(snapshot.data()!), toFirestore: (event, _) => event.toJson()) // 仅匹配单个uid时用arrayContains即可,性能优于arrayContainsAny .where('invited', arrayContains: uid) .get(); // 遍历所有查询到的文档,取出Event对象拼成列表返回 return querySnapshot.docs.map((doc) => doc.data()).toList(); }
补充说明
- 如果你需要保留每个文档的ID、元数据等信息,可以把返回值改成
Future<List<QueryDocumentSnapshot<Event>>>,直接返回querySnapshot.docs即可 - 你可以通过
querySnapshot.docs.isEmpty或者querySnapshot.size == 0判断查询结果是否为空
内容的提问来源于stack exchange,提问作者Gustavo Barros
相关产品推荐
相关产品推荐

