Я хотел бы получить адрес электронной почты и полное имя пользователя для входа в 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» в базе данных после регистрации нового пользователя. Я попробовал оба этих варианта...
Я рекомендую использовать 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,
});