Вход в Flutter Google не получает имя пользователя Google - Firestore

Я хотел бы получить адрес электронной почты и полное имя пользователя для входа в Google, но по какой-то причине мне не удалось получить имя пользователя. Подскажите, пожалуйста, как это можно исправить?

   signInWithGoogle() async {
    final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
    final GoogleSignInAuthentication? googleAuth =
        await googleUser?.authentication;
    var credential = GoogleAuthProvider.credential(
      accessToken: googleAuth?.accessToken,
      idToken: googleAuth?.idToken,
    );
    await FirebaseAuth.instance.signInWithCredential(credential).then((value) {
      final user = value.user!;
      setState(() {
        id = user.uid; name = user.displayname;
        email = user.email ?? '[email protected]';
      });
      value.additionalUserInfo!.isNewUser
          ? FirebaseFirestore.instance
              .collection("users")
              .doc(
                id,
              )
              .set({
              'email': email, 'name': name,
            })
          : null;
    })
  }

Значение имени должно получить имя пользователя в Google из значения «user» или «additionalUserInfo», но по какой-то причине я получаю дополнительное имя «Guest user» в базе данных после регистрации нового пользователя. Я попробовал оба этих варианта...


1
53
1

Ответ:

Решено

Я рекомендую использовать value.user! как для установки переменной состояния name, так и для записи в базу данных:

final user = value.user!;
setState(() {
  name = user.displayName;
});
FirebaseFirestore.instance
     .collection("usertable")
     .doc(user.uid)
     .set({
         'email': user.email,
         'fullname': user.displayName,
       });