signInWithGoogle method

Future<CuReSupabaseAuthResponse> signInWithGoogle(
  1. String webClientId, [
  2. Map<String, dynamic>? userMetadata
])

Implementation

Future<CuReSupabaseAuthResponse> signInWithGoogle(String webClientId,
    [Map<String, dynamic>? userMetadata]) async {
  try {
    final GoogleSignIn googleSignIn = GoogleSignIn(
      serverClientId: webClientId,
    );
    final googleUser = await googleSignIn.signIn();
    final googleAuth = await googleUser!.authentication;
    final accessToken = googleAuth.accessToken;
    final idToken = googleAuth.idToken;
    final supabase = Supabase.instance.client;

    if (accessToken == null) {
      throw '[Supabase CuRe Auth] Could not find access token from Google sign in.';
    }
    if (idToken == null) {
      throw '[Supabase CuRe Auth] Could not find ID token from Google sign in.';
    }

    final result = await supabase.auth.signInWithIdToken(
      provider: OAuthProvider.google,
      idToken: idToken,
      accessToken: accessToken,
    );

    // Update user metadata if provided
    if (result.user != null && userMetadata != null) {
      await supabase.auth.updateUser(
        UserAttributes(
          data: userMetadata,
        ),
      );
    }

    return CuReSupabaseAuthResponse(
      user: result.user,
      session: result.session,
      error: null,
    );
  } catch (e) {
    // ignore: avoid_print
    print('[Supabase CuRe Auth] Exception during Google sign in: $e');
    return CuReSupabaseAuthResponse(
      user: null,
      session: null,
      error: _getErrorMessage(e),
    );
  }
}