Flutter中如何获取Firestore自动生成的文档ID并存储到文档内?
解决方案
你可以先在本地生成带唯一ID的文档引用,拿到ID后再一次性写入数据,全程仅需一次Firestore交互,无额外性能开销。修改后的代码如下:
Future createPlan(String planName, List exerciseNames, List rows) async { // 不传参数调用doc()方法时,Firestore会在本地生成唯一ID,不会发起网络请求 final planDocRef = usersCol.doc(myUser.uid).collection('plans').doc(); // 直接从引用属性中获取生成好的ID final newPlanId = planDocRef.id; // 写入数据到对应文档 await planDocRef.set({ 'planId': newPlanId, 'name': planName, 'exerciseNames': exerciseNames, 'rows': rows, }); return planDocRef; }
- 该方案的ID生成本地完成,不会消耗额外的请求配额,也不会出现数据和ID写入不一致的问题,是官方推荐的实现方式。
仅作参考的二次写入方案(不推荐使用):
如果你坚持使用原有的add()方法逻辑,也可以在add完成后拿到返回的文档引用,再二次更新写入ID,但会多触发一次网络请求,代码如下:Future createPlan(String planName, List exerciseNames, List rows) async { final planDocRef = await usersCol.doc(myUser.uid).collection('plans').add({ 'name': planName, 'exerciseNames': exerciseNames, 'rows': rows, }); // 二次更新写入文档ID await planDocRef.update({'planId': planDocRef.id}); return planDocRef; }
内容的提问来源于stack exchange,提问作者Dalon
相关产品推荐
相关产品推荐

