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

Cloud Firestore创建聊天文档后如何获取文档ID?

解决Cloud Firestore新建文档ID获取问题

你遇到的问题是因为调用chats.add()后返回的是DocumentReference对象,而非直接的文档ID字符串。直接将这个对象赋值给chatDocId,自然会输出对象的描述文本,而非预期的ID。

正确获取ID的方法

要拿到新建文档的ID,只需访问DocumentReference对象的id属性即可。同时,因为你需要更新UI状态,记得把赋值操作放到setState里:

修改创建文档部分的代码:

await chats.add({
  'users': {usuario!.email: null, widget.emailOtro: null},
  'names':{usuario!.email:miAlias,widget.emailOtro:widget.aliasOtro }
}).then((value) {
  print("chat id recibido ${value.id}");
  setState(() {
    chatDocId = value.id;
  });
});

代码优化建议

你当前的代码混合使用了async/await和then,可读性较差。建议统一用async/await写法,逻辑更清晰:

void checkUser() async {
  try {
    final querySnapshot = await chats
        .where('users', isEqualTo: {widget.emailOtro: null, usuario!.email: null})
        .limit(1)
        .get();

    if (querySnapshot.docs.isNotEmpty) {
      setState(() {
        chatDocId = querySnapshot.docs.single.id;
        existeChatroom = true;
      });
      print(chatDocId);
    } else {
      setState(() {
        existeChatroom = false;
      });
      final newDocRef = await chats.add({
        'users': {usuario!.email: null, widget.emailOtro: null},
        'names':{usuario!.email:miAlias,widget.emailOtro:widget.aliasOtro }
      });
      setState(() {
        chatDocId = newDocRef.id;
      });
      print("chat id recibido ${newDocRef.id}");
    }
  } catch (error) {
    // 这里可以添加错误处理逻辑
    print('出错了: $error');
  }
}

内容的提问来源于stack exchange,提问作者mvasco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:15:26