signInWithGoogle method

Future<UserCredential?> signInWithGoogle()

Implementation

Future<UserCredential?> signInWithGoogle() async {
  final googleSignInAccount = await googleSignIn.signIn();
  if (googleSignInAccount != null) {
    try {
      final googleSignInAuthentication =
          await googleSignInAccount.authentication;
      final credential = GoogleAuthProvider.credential(
        accessToken: googleSignInAuthentication.accessToken,
        idToken: googleSignInAuthentication.idToken,
      );
      var creds = await auth.signInWithCredential(credential);
      if (creds.user != null) _errorStreamController.sink.add(null);
      return creds;
    } on FirebaseAuthException catch (e) {
      switch (e.code) {
        case 'account-exists-with-different-credential':
          _errorStreamController.sink.add('Phonenumber already in use');
          break;
        case 'invalid-credential':
          _errorStreamController.sink.add('Credential provided are invalid');
          break;
        case 'user-disabled':
          _errorStreamController.sink.add('Account banned');
          break;
        case 'invalid-verification-code':
          _errorStreamController.sink.add('OTP provided is Invalid');
          break;
        default:
          _errorStreamController.add('Error occured. Contact admin!!');
          break;
      }
    }
  } else {
    _errorStreamController.add('Sign In Failed. Try again afetr sometime');
    return null;
  }
}