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
相关产品推荐
相关产品推荐

