signInWithGoogle method

  1. @override
Future<Either<AuthFailure, Unit>> signInWithGoogle()
override

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());
  }
}