signInWithGoogle method
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),
);
}
}