linkIdentity method

Future<bool> linkIdentity(
  1. OAuthProvider provider, {
  2. String? redirectTo,
  3. String? scopes,
  4. LaunchMode authScreenLaunchMode = LaunchMode.platformDefault,
  5. Map<String, String>? queryParams,
})

Links an oauth identity to an existing user. This method supports the PKCE flow.

Implementation

Future<bool> linkIdentity(
  OAuthProvider provider, {
  String? redirectTo,
  String? scopes,
  LaunchMode authScreenLaunchMode = LaunchMode.platformDefault,
  Map<String, String>? queryParams,
}) async {
  final res = await getLinkIdentityUrl(
    provider,
    redirectTo: redirectTo,
    scopes: scopes,
    queryParams: queryParams,
  );
  final uri = Uri.parse(res.url);

  LaunchMode launchMode = authScreenLaunchMode;

  // `Platform.isAndroid` throws on web, so adding a guard for web here.
  final isAndroid = !kIsWeb && Platform.isAndroid;

  // Google login has to be performed on external browser window on Android
  if (provider == OAuthProvider.google && isAndroid) {
    launchMode = LaunchMode.externalApplication;
  }

  final result = await launchUrl(
    uri,
    mode: launchMode,
    webOnlyWindowName: '_self',
  );
  return result;
}