You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:36:03