首页 > 解决方案 > 由于我的应用程序使用密码身份验证,因此上面的代码将在该字段中给我 null

问题描述

void _addMessage(String value) async {
    final user = FirebaseAuth.instance.currentUser;
    if (user != null) {
      await FirebaseFirestore.instance.collection("interest_chat").add({
        'author': user.displayName ?? "Anonymous",
        'author_id': user.uid,
        'timestamp': Timestamp.now().millisecondsSinceEpoch,
        'value': value,
      });
    }
  }

由于我的应用程序使用密码身份验证,因此上面的代码将在“作者”字段中给我 null。但是我想显示存储在另一个firebase集合中的用户名,它位于FirebaseFirestore.instance.collection("users").doc(user!.uid) 我对flutter和firebase非常陌生的位置,这是我为学校项目制作的第一个应用程序,任何帮助或指导都会被赏识。

标签: firebasefluttergoogle-cloud-firestorefirebase-authentication

解决方案


您的问题可能会更好,但根据我的理解,似乎新用户没有displayName与该user对象关联,因为您使用的是 email_id + 密码注册选项,并且您希望检索存储在另一个集合中的用户名在“用户”下的firestore。

Future<String> _getUsername() async {
  final user = FirebaseAuth.instance.currentUser;
  final docSnap =
  await FirebaseFirestore.instance.collection("users").doc(user!.uid).get();
  return docSnap.get(
      'userName'); //assuming the field within the document is titled ‘userName’
}

void _addMessage(String value) async {
  final user = FirebaseAuth.instance.currentUser;
  if (user != null) {
    final userName = await _getUsername();
    await FirebaseFirestore.instance.collection("interest_chat").add({
      'author': userName,
      'author_id': user.uid,
      'timestamp': Timestamp.now().millisecondsSinceEpoch,
      'value': value,
    });
  }
}

推荐阅读