Skip to main content
Para treats OAuth the same as email and phone authentication: trigger the flow, reuse the One-Click block, and fall back to passkey/password only if you explicitly enable them.

Before You Start

  • Complete the base setup so your app has a custom URL scheme and a shared FlutterWebAuthSession (setup guide).
  • Add social buttons alongside your email/phone inputs; users should see all auth options together.

Handle Social Login

lib/views/authentication_view.dart
Future<void> handleSocialLogin(OAuthMethod provider) async {
  try {
    final authState = await para.verifyOAuth(
      provider: provider,
      appScheme: 'yourapp',
    );

    if (authState.loginUrl?.isNotEmpty == true) {
      await para.presentAuthUrl(
        url: authState.loginUrl!,
        webAuthenticationSession: webAuthSession,
      );

      final nextStage = authState.effectiveNextStage;
      if (nextStage == AuthStage.signup) {
        await para.waitForSignup();
      } else {
        await para.waitForLogin();
      }

      await para.touchSession();
      await para.fetchWallets();
      return;
    }

    if (authState.stage == AuthStage.login) {
      try {
        await para.touchSession();
      } catch (_) {
        // Session refresh is best-effort for OAuth callbacks
      }
      await para.fetchWallets();
      // Navigate to your main app flow
    }
  } catch (e) {
    debugPrint('OAuth login failed: $e');
  }
}
Same pattern as the example app (examples-hub/mobile/with-flutter/lib/screens/auth_screen.dart).

Provider Enum Reference

ProviderEnum
GoogleOAuthMethod.google
AppleOAuthMethod.apple
DiscordOAuthMethod.discord
Other providers (Twitter, Facebook, Farcaster, etc.) are not part of the default Flutter example or this guide. Refer to the API reference to see which ones your project supports today.

See It in Action

Flutter Example App