我试图在用户使用 flutter 中的 firebase 与 google 签名后获取用户详细信息。这是我的代码,它成功地让用户登录,但是当我访问详细信息时,当我将鼠标悬停在红线上时,它会向我显示此消息 - 错误 - 无法无条件访问属性“用户名”,因为接收者可以为“空”
Future<User?> signInWithGoogle() async {
FirebaseAuth auth = FirebaseAuth.instance;
User? user;
final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
if (googleUser != null) {
final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
try {
final UserCredential userCredential = await auth.signInWithCredential(credential);
final user = userCredential.additionalUserInfo.username;
print(user);
} on FirebaseAuthException catch (e) {
if (e.code == 'account-exists-with-different-credential') {
} else if (e.code == 'invalid-credential') {
}
} catch (e) {
}
}
return user;
}
}
如何获取登录用户的所有详细信息,包括会话信息?
您看到错误消息的原因在其中得到了很好的解释:值
username
不能像这样使用,因为该值的所有者可以是null
,因此您需要首先检查它是否为空或不是。
Ti 使用
onAuthStateChanged
监听器获取用户数据:
FirebaseAuth.instance
.authStateChanges()
.listen((User? user) {
if (user == null) {
print('User is currently signed out!');
} else {
print('User is signed in!');
}
});
这将使您的身份验证状态管理变得更加容易,并为您使用的任何提供程序通用化工作流程。您还可以用它捕获注销