如何在Flutter中生成Firebase文档引用列表并存入指定字段
解决Firestore文档引用列表的生成问题
你的核心问题是:当前testList存储的是文档ID字符串,而Firestore中tests字段要求的是文档引用(DocumentReference)的列表,直接拼接字符串的写法既存在语法错误,也不符合字段类型要求。
修改方案1:查询时直接生成文档引用列表
不需要先存储文档ID,在查询结果中直接提取每个文档的引用:
var testRefs = <DocumentReference>[]; await db .collection('tests') .where('user', arrayContainsAny: [db.doc('users/' + uid)]) .get() .then((value) { value.docs.forEach((element) { testRefs.add(element.reference); // 直接获取文档引用对象 }); }); // 可选:验证列表内容 for (final ref in testRefs) { print(ref.id); }
修改方案2:从已有ID列表转换为文档引用列表
如果需要保留原有的testList(存储文档ID),可以通过map方法将每个ID转换为对应的文档引用:
// 假设已存在存储文档ID的testList var testRefs = testList.map((testId) => db.doc('tests/$testId')).toList();
适配字段的最终写入代码
将生成的文档引用列表传入tests字段即可:
final testCollectionEntries = { 'tests': testRefs, // 传入文档引用列表,匹配Firestore字段类型 'name': testCollectionName }; await db.collection("testsCollection").add(testCollectionEntries);
错误原因说明
你原来的代码db.doc('tests/' + testList)存在两个问题:
- 语法错误:
testList是数组,无法直接与字符串进行拼接操作; - 类型不匹配:即使是单个ID,这里生成的是单个文档引用,而字段要求的是文档引用的列表,必须传入数组类型的值。
内容的提问来源于stack exchange,提问作者Constantine Nikolopoulos
相关产品推荐
相关产品推荐

