如何在Flutter聊天应用程序中使用Firebase根据用户的电子邮件查询Firestore用户名

yrefmtwq  于 2023-08-07  发布在  Flutter
关注(0)|答案(1)|浏览(142)

我正在使用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(),
});

00jrzges

00jrzges1#

我建议您通过调用updateDisplayName()来更新User对象,而不是将用户名添加到Firestore中的userNames集合中。现在,当你想发送新消息时,你可以简单地用途:

await _fireStore.collection('messages').add({
  'Text': messageText,
  'Sender': FirebaseAuth.instance.currentUser!.displayName,
  //                                               👆
  'Time': DateTime.now(),
});

字符串
这种方法的好处是您不必为Firestore中的写操作付费。在Firebase身份验证中阅读和更新用户对象是免费的。

相关问题