我知道这个问题已经被问过很多次了,但是我的问题有点不同。我试图将firestore文档ID存储在文档本身中。每当我试图保存它时,都会出现一个错误,说
如果您的数据包中包含一个引用,请单击"链接"。失败的Assert:第116行位置14:'路径.不为空':文档路径必须是非空字符串)。
我知道我应该在''之间放一个空格,但当我这样做时,firestore文档的文档ID为空。
这是在firestore中创建组的代码
Future<String?> addCollection(
Username, groupName, location, postText, groupID, password) async {
String id = FirebaseFirestore.instance.collection('groups').doc(groupID).id;
CollectionReference collection =
FirebaseFirestore.instance.collection('groups');
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('groupID', groupID.toString());
var result = await collection.doc(id).set({
'groupName': groupName,
'groupChatId': id,
'creator': Username,
'testmember': [],
'location': location,
'password': password
});
print(id);
await subcollection(id: id, postText: postText, Username: Username);
return 'Created';
}
Future<String?> subcollection(
{id, required Username, required postText}) async {
CollectionReference collection =
FirebaseFirestore.instance.collection('groups');
collection.doc(id).collection('posts').add({
'postText': postText,
'createdBy': Username,
'createdAt': Timestamp.now()
});
return 'Created';
}
1条答案
按热度按时间ycggw6v21#
我试图将firestore文档ID存储在文档本身中。
Firestore有一个特定的方法,可以在提交doc()之前获取自动生成的ID。基本上,您可以使用自动生成的ID创建一个对文档的引用,然后在传递数据时使用它。在您的示例中:
在后台,.add(...)和.doc().set(...)是完全等效的,因此您可以使用哪个更方便。
此处提供更多信息
另请注意,假设您希望subCollection()在addCollection()之后运行,则应该使用带有try catch的then()或使用Transactions/Batch writes,因为您最不希望subCollection()在addCollection()之前运行。