signInWithGoogle method
Sign in with google return Future<Either<AuthFailure, Unit>>
Implementation
@override
Future<Either<AuthFailure, Unit>> signInWithGoogle() async {
try {
final googleUser = await _googleSignIn.signIn();
if (googleUser == null) {
return const Left(AuthFailure.cancelledByUser());
}
final googleAuthentication = await googleUser.authentication;
final authCredential = GoogleAuthProvider.credential(
idToken: googleAuthentication.idToken,
accessToken: googleAuthentication.accessToken);
final previousUser = getSignedInUser();
if (previousUser != null) {
await previousUser.linkWithCredential(authCredential);
} else {
await _firebaseAuth.signInWithCredential(authCredential);
}
return right(unit);
} on FirebaseAuthException catch (e) {
print(e);
if (e.code.contains('credential-already-in-use')) {
return const Left(AuthFailure.emailAlreadyInUse());
}
return const Left(AuthFailure.serverError());
}
}