Flutter Platform Exception in Google Sign - flutter

I have successfully completed the Google sign-in thing in Flutter. But if the user quits logging in I get an error. I couldn't figure out how to check for these errors. The answers I found are very old. Here is my code.
Future<UserCredential> signInWithGoogle() async {
final GoogleSignInAccount? googleUser =
await GoogleSignIn(scopes: <String>["email"]).signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser!.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
return await FirebaseAuth.instance.signInWithCredential(credential);
}
And my error
Exception has occurred.
PlatformException (PlatformException(sign_in_canceled, com.google.GIDSignIn, The user canceled the sign-in flow., null))
How can i handle that?

Related

Flutter Google sign-in error on first time login

I am using google_sign_in plugin. It's running fine if the user has already account logged in and user just needs to select his account.
But when a new google account is added just before the login, then googleUser remains null and hence it throws exception.
Here's the code.
Future<UserCredential> signInWithGoogle() async {
//here googleUser remains null on first time login.....
GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
// Obtain the auth details from the request
final GoogleSignInAuthentication? googleAuth =
await googleUser?.authentication;
final OAuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth?.accessToken,
idToken: googleAuth?.idToken,
);
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(credential);
}

Flutter While trying to login to Google, the permissions in scopes continue unintentionally

While trying to login to Google, the permissions in scopes continue unintentionally.
Moreover:
W/System (11494): Ignoring header X-Firebase-Locale because its value was null.
W/System (11494): Ignoring header X-Firebase-Locale because its value was null.
I'm getting a warning like this in logcat.
final googleSignIn = GoogleSignIn(scopes: [
"https://www.googleapis.com/auth/user.gender.read",
"https://www.googleapis.com/auth/user.birthday.read"
]);
GoogleSignInAccount? _user;
GoogleSignInAccount get user => _user!;
Future googleLogin() async {
try {
final googleUser = await googleSignIn.signIn();
if (googleUser == null) return;
_user = googleUser;
final googleAuth = await googleUser.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
await getGender();
await getBirthday();
await saveData();
await FirebaseAuth.instance.signInWithCredential(credential);
} catch (e) {
print(e.toString());
}
}
I get this error when I delete the app from the emulator and install it.
Future logout() async {
await googleSignIn.disconnect();
FirebaseAuth.instance.signOut();
}
After logging in once,
I do not encounter this error again after logging out with the above function
What could be the reason?

An error occurs when Google Sign in canceled

When user pushes a button, signInWithGoogle() will be called.
Future<void> signInWithGoogle() async {
final GoogleSignInAccount? googleUser;
final GoogleSignInAuthentication googleAuth;
googleUser = await GoogleSignIn().signIn().catchError((e) {
context.read<LoginModel>().load(false); //Have the user login again
});
if (googleUser == null) {
return;
}
googleAuth = await googleUser.authentication;
final OAuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
await FirebaseAuth.instance.signInWithCredential(credential);
mainpage.accountCreated();
context.read<mainpage.UserInfo>().setUser();
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
content: Text("Success"),
));
context.read<mainpage.UserInfo>().getUserInfo();
}
If signin succeeded, no error has occurs.
However if the process canceled, the error below has occured.
throw PlatformException(code: errorCode, message: errorMessage as String?, details: errorDetails, stacktrace: errorStacktrace);
What should I do?

PlatformException(popup_blocked_by_browser, Exception raised from GoogleAuth.signIn()

I keep on getting
PlatformException(popup_blocked_by_browser, Exception raised from GoogleAuth.signIn() every first attempt when trying to use google_sign_in flutter package to sign in via Google. This only happens when I use safari, its fine on chrome.
I'm wondering why it fails on the first attempt but works on the attempts after. And if I refresh my browser it fails again on the first attempt.
Here's my function using firebase auth and google sign in
#override
Future<auth.User?> signInWithGoogle() async {
final GoogleSignInAccount? googleUser =
await _googleSignIn.signInSilently();
final GoogleSignInAuthentication? googleAuth =
await googleUser?.authentication;
if (googleAuth == null) {
return null;
}
final AuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
final UserCredential userCredential =
await _firebaseAuth.signInWithCredential(credential);
return auth.User(
uid: userCredential.user?.uid,
email: userCredential.user?.email,
);
}

flutter how to catch error google sign in

Future<UserCredential> signInWithGoogle() async {
// Trigger the authentication flow
final GoogleSignInAccount googleUser = await GoogleSignIn().signIn();
// Obtain the auth details from the request
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
// Create a new credential
final GoogleAuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(credential);
}
Future signInWithFacebook() async {
// Trigger the sign-in flow
try {
final AccessToken accessToken = await FacebookAuth.instance.login();
// Create a credential from the access token
final OAuthCredential credential = FacebookAuthProvider.credential(
accessToken.token,
);
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(credential);
} on FacebookAuthException catch (e) {
// handle the FacebookAuthException
} on FirebaseAuthException catch (e) {
// handle the FirebaseAuthException
} finally {}
return null;
}
//pub.yaml
google_sign_in: ^5.0.1
make the social login auth but I can't catch error google sign in.
I'm already Facebook sign in and apple sign in error catch but
I can't catch error on google sign in
please help me
If you make the return type of <UserCredential?> nullable, you'd be able to work with it.
//this UserCredential?
Future<UserCredential?> signInWithGoogle() async {
// Trigger the authentication flow
try {
final GoogleSignInAccount? googleUser = await (GoogleSignIn().signIn());
// Obtain the auth details from the request
final GoogleSignInAuthentication googleAuth = await googleUser!.authentication;
// Create a new credential
final GoogleAuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
) as GoogleAuthCredential;
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(credential);
} catch (e) {
print(e);
return null ;
}
}
Right now I'm also facing this issue. Your code is fine. Run your app in Release mode and everything will work fine as expected. It's very strange behavior.
this only occurs in Emulators, not in the real devices.