linkWithCredential method
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;
}
}