Flatter Firebase:如何在Firestore中只记录显示名称的第一个名称?

Flatter Firebase:如何在Firestore中只记录显示名称的第一个名称?,firebase,flutter,google-cloud-firestore,displayname-attribute,Firebase,Flutter,Google Cloud Firestore,Displayname Attribute,我在Firestore中编写了以下代码,用于使用Google登录的auth类: import 'package:firebase_auth/firebase_auth.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'dart:async'; class AuthService { final G

我在Firestore中编写了以下代码,用于使用Google登录的auth类:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'dart:async';

class AuthService {
  final GoogleSignIn _googleSignIn = GoogleSignIn();
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final Firestore _db = Firestore.instance;


  Future<FirebaseUser> get getUser => _auth.currentUser();

  Stream<FirebaseUser> get user => _auth.onAuthStateChanged;

  Future<FirebaseUser> googleSignIn() async {
    try {
      GoogleSignInAccount googleSignInAccount = await _googleSignIn.signIn();
      GoogleSignInAuthentication googleAuth =
          await googleSignInAccount.authentication;

      final AuthCredential credential = GoogleAuthProvider.getCredential(
        accessToken: googleAuth.accessToken,
        idToken: googleAuth.idToken,
      );

      FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
      updateUserData(user);

    Future<void> updateUserData(FirebaseUser user) {
    DocumentReference usersRef = _db.collection('users').document(user.uid);

    return usersRef.setData({
      'uid': user.uid,
      'email': user.email,
      'displayName': user.displayName,
      'photoUrl': user.photoUrl,
      'lastActivity': DateTime.now(),
    }, merge: true);

  }

  Future<void> signOut() {
    return _auth.signOut();
  }

}
import'package:firebase_auth/firebase_auth.dart';
导入“包:google_sign_in/google_sign_in.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“dart:async”;
类身份验证服务{
最终GoogleSignIn _GoogleSignIn=GoogleSignIn();
final FirebaseAuth _auth=FirebaseAuth.instance;
final Firestore _db=Firestore.instance;
Future get getUser=>_auth.currentUser();
Stream get user=>\u auth.onAuthStateChanged;
Future googleSignIn()异步{
试一试{
GoogleSignInAccount GoogleSignInAccount=等待_googleSignIn.signIn();
谷歌签名认证=
等待googleSignInAccount.authentication;
final AuthCredential credential=GoogleAuthProvider.getCredential(
accessToken:googleAuth.accessToken,
idToken:googleAuth.idToken,
);
FirebaseUser用户=(等待身份验证登录,使用凭证(凭证)).user;
updateUserData(用户);
Future updateUserData(FirebaseUser用户){
DocumentReference usersRef=_db.collection('users').document(user.uid);
返回usersRef.setData({
“uid”:user.uid,
“电子邮件”:user.email,
“displayName”:user.displayName,
“photoUrl”:user.photoUrl,
“lastActivity”:DateTime.now(),
},merge:true);
}
未来签出(){
返回_auth.signOut();
}
}

我只需要收集Firestore的名字。有没有一种合乎逻辑的方法可以在我的身份验证过程中完成?谢谢!

所以你只想在Firestore中保存用户的名字?是的,这是正确的。基本上,我们正在构建的内容是隐私性的,我们不想在流中调用用户的全名。这就是为什么只进行录制的原因对于每个用户来说,名字是最好的选择。return usersRef.setData({'displayName':user.displayName,},merge:true);在项目中使用此代码对不起,我应该澄清一下。我仍然需要'uid','email','photo url'和'last activity'`` return usersRef.setData({'uid':user.uid,'email':user.email,'displayName':user.displayName,(只记录名字而不是全名)'photoUrl':user.photoUrl,'lastActivity':DateTime.now(),},merge:true);}```