Flutter+Firebase密码认证下author字段为空,如何从users集合获取用户名
问题原因
使用邮箱密码注册 Firebase 账号时,Auth 模块的 displayName 字段默认不会自动赋值,只有注册时主动调用 updateDisplayName 方法设置才会有值,所以你要从自定义的 users 集合拉取用户名的思路是正确的。
修改后的完整代码
void _addMessage(String value) async { final user = FirebaseAuth.instance.currentUser; if (user != null) { // 从users集合拉取当前用户的文档 final userDoc = await FirebaseFirestore.instance.collection("users").doc(user.uid).get(); // 注意把这里的'username'替换成你自己users集合里存储用户名的实际字段名 String userName = userDoc.data()?['username'] ?? "Anonymous"; // 写入聊天集合 await FirebaseFirestore.instance.collection("interest_chat").add({ 'author': userName, 'author_id': user.uid, 'timestamp': Timestamp.now().millisecondsSinceEpoch, 'value': value, }); } }
带异常处理的优化版本
如果需要兼容网络异常、用户文档不存在的场景,可以用以下写法避免方法崩溃:
import 'package:flutter/foundation.dart'; void _addMessage(String value) async { final user = FirebaseAuth.instance.currentUser; if (user != null) { String userName = "Anonymous"; try { final userDoc = await FirebaseFirestore.instance.collection("users").doc(user.uid).get(); if (userDoc.exists) { userName = userDoc.data()?['username'] ?? "Anonymous"; } } catch (e) { // 出错时默认用Anonymous,你也可以自行添加日志上报逻辑 debugPrint('获取用户信息失败: $e'); } await FirebaseFirestore.instance.collection("interest_chat").add({ 'author': userName, 'author_id': user.uid, 'timestamp': Timestamp.now().millisecondsSinceEpoch, 'value': value, }); } }
内容的提问来源于stack exchange,提问作者Agnelo Fernandes
相关产品推荐
相关产品推荐

