登录Google后返回应用程序时无法获取用户数据



我用这个代码登录了google

GoogleSignIn googleSignIn = GoogleSignIn();
try{
await googleSignIn.signIn();
}on Exception catch (e) {
print(e);
}

它工作得很好,我能够获得用户数据。问题是,当用户关闭应用程序并再次打开它时,我希望能够再次获得此数据,因此我使用

await GoogleSignIn().isSignedIn().then((value) {
if (value) {
isLogin = true;

GoogleSignIn().currentUser
GoogleSignIn().currentUser?.id
}
});

currentUser和currentUser。id都给我null那么如何解决

你需要使用firebase_auth包与google sign一起将数据存储在firebase中,并在启动应用程序时再次获得它。

final googleSignIn = GoogleSignIn();
GoogleSignInAccount? _user;
GoogleSignInAccount get user => _user!;
Future sigiIn() async {
final googleUser = await googleSignIn.signIn();
if (googleUser != null) {
_user = googleUser;
}
final googleAuth = await googleUser!.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken, idToken: googleAuth.idToken);
return FirebaseAuth.instance.signInWithCredential(credential);
}

然后

callsigiIn()on Button按下

,您可以在main.dart中通过streamBuilderHomeScreen之前收听FirebaseAuth.instance.authStateChanges(),如以下所示。

home: StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
} else if (snapshot.hasData) {
return MainScreen();
} else if (snapshot.hasError) {
return Center(
child: Text('Try again later!!!'),
);
} else {
return SignInScreen();
}
}),