linkWithCredential method

Future<UserCredential> linkWithCredential(
  1. AuthCredential credential
)

Links the user account with the given credentials.

Implementation

Future<UserCredential> linkWithCredential(AuthCredential credential) async {
  try {
    if (credential is EmailAuthCredential) {
      final response = await _auth._api.emailAndPasswordAuth.linkWithEmail(
        _idToken,
        credential: credential,
      );

      _setIdToken(response.idToken);
      await reload();

      return UserCredential._(
        auth: _auth,
        credential: credential,
      );
    } else if (credential is PhoneAuthCredential) {
      final confirmationResult = ConfirmationResult(
        _auth,
        credential.verificationId!,
      );

      return await confirmationResult.confirm(credential.smsCode!);
    } else if (credential is OAuthCredential) {
      final response = await _auth._api.idpAuth.signInWithOAuthCredential(
        idToken: _idToken,
        requestUri: _auth.app.options.authDomain,
        providerId: credential.providerId,
        providerAccessToken: credential.accessToken,
        providerIdToken: credential.idToken,
        nonce: credential.rawNonce,
        providerSecret: credential.secret,
      );

      _setIdToken(response.idToken);
      await reload();

      return UserCredential._(
        auth: _auth,
        credential: credential,
        additionalUserInfo: AdditionalUserInfo(
          isNewUser: response.isNewUser ?? false,
          providerId: response.providerId,
          username: response.screenName,
          profile: {
            'displayName': response.displayName,
            'photoURL': response.photoUrl,
          },
        ),
      );
    } else {
      throw UnsupportedError('${credential.providerId} is not supported.');
    }
  } catch (e) {
    rethrow;
  }
}