Flutter Cloud Firestore 4.14报错:CollectionReference无collection方法
问题解决:Cloud Firestore 4.14访问子集合报错"The method 'collection' isn't defined for the type 'CollectionReference'"
错误原因
Cloud Firestore的数据结构遵循集合→文档→子集合→文档的层级关系,子集合是依附于具体文档的,而非直接属于集合。你当前代码直接在CollectionReference(集合引用)上调用collection()方法,不符合Firestore的API规则,4.x版本SDK也不再支持这种错误用法。
解决方案
根据你的实际需求选择对应方式:
方式1:访问指定文档的子集合
如果你需要访问expenses集合中某一特定文档下的enero-app-gastos子集合,需先获取该文档的引用,再调用collection():
Future<List> getcollectioncategory() async { // 获取expenses集合下目标文档的引用(替换doc123为实际文档ID) DocumentReference targetDoc = FirebaseFirestore.instance.collection("expenses").doc("doc123"); // 获取该文档的子集合 CollectionReference subcollection = targetDoc.collection("enero-app-gastos"); QuerySnapshot collectionSnapshot = await subcollection.get(); List hola = []; // 必须初始化列表,避免未定义错误 if (collectionSnapshot.docs.isNotEmpty) { for (var doc in collectionSnapshot.docs) { print(doc.data()); hola.add(doc.data()); } } else { print("bad query"); } return hola; }
方式2:集合组查询(所有文档的同名子集合)
如果你需要查询expenses集合下所有文档中的enero-app-gastos子集合,使用collectionGroup()方法:
Future<List> getcollectioncategory() async { // 集合组查询,匹配所有名为"enero-app-gastos"的子集合 Query collectionGroupQuery = FirebaseFirestore.instance.collectionGroup("enero-app-gastos"); QuerySnapshot collectionSnapshot = await collectionGroupQuery.get(); List hola = []; if (collectionSnapshot.docs.isNotEmpty) { for (var doc in collectionSnapshot.docs) { print(doc.data()); hola.add(doc.data()); } } else { print("bad query"); } return hola; }
额外注意点
你原代码中的hola变量未初始化,会导致运行时错误,必须提前声明并初始化List hola = [];。
内容的提问来源于stack exchange,提问作者Aroon Jhon Alcántara Vidal
相关产品推荐
相关产品推荐

