我正在使用Flutter和Firebase构建一个聊天应用程序,在聊天消息中无法正确显示发送者的姓名。
在注册屏幕上,我将用户名存储在一个名为'userNames'的Firestore集合中,如下所示:
final newUser = await _auth.createUserWithEmailAndPassword(email: email, password: password);
await _firestore.instance.collection('userNames').add({'name': userName});
if (newUser != null && password.length >= 6) {
Navigator.pushReplacementNamed(context, 'chat');
}
字符串
当用户在聊天屏幕上发送新消息时,我会将消息数据存储在名为'messages'的Firestore集合中,如下所示:
await _fireStore.collection('messages').add({
'Text': messageText,
'Sender': FirebaseAuth.instance.currentUser!.email,
'Time': DateTime.now(),
});
型
我想在聊天消息中显示发件人的姓名而不是他们的电子邮件地址。因此,在消息集合中,我尝试发送先前存储的当前用户的名称,而不是用户的电子邮件。
提前感谢您提供的任何帮助或建议,以帮助我解决这个问题。非常感谢您的专业知识和指导!
要做到这一点,我尝试了这种方式,然而,这似乎不工作.
final currentUser = FirebaseAuth.instance.currentUser!;
final userNamesSnapshot = await _firestore.instance.collection('userNames').where('email', isEqualTo: currentUser.email).get();
final userName = userNamesSnapshot.docs.first.get('name');
await _fireStore.collection('messages').add({
'Text': messageText,
'Sender': userName,
'Time': DateTime.now(),
});
型
1条答案
按热度按时间00jrzges1#
我建议您通过调用updateDisplayName()来更新User对象,而不是将用户名添加到Firestore中的
userNames
集合中。现在,当你想发送新消息时,你可以简单地用途:字符串
这种方法的好处是您不必为Firestore中的写操作付费。在Firebase身份验证中阅读和更新用户对象是免费的。