signUp method
Sign up — returns CkAuthResult with OTP info if needed
Implementation
Future<CkAuthResult<TProfile>> signUp({
Map<String, dynamic>? body,
List<String>? pathParams,
Map<String, dynamic>? queryParams,
Map<String, dynamic>? formFields,
List<Map<String, dynamic>>? listBody,
Map<String, dynamic>? files,
Map<String, String>? headers,
LoginCallback? loginCallback,
}) {
_pendingLoginCallback = loginCallback;
return loadingController.wrap(CkAuthLoadingType.signUp, () async {
final builtHeaders = {
...?config.signupHeadersBuilder?.call(otpManager.lastVerificationToken),
...?headers,
};
if (config.mockAuth) {
const activeTrigger = CkOtpTrigger.signup;
final autoOtp = config.otpConfig.autoTriggers.contains(activeTrigger);
if (_preSignupOtpVerified) {
_preSignupOtpVerified = false;
return _resolvePostSignupAuth(
responseData: const {'message': 'Mock sign up successful'},
statusCode: 200,
);
} else if (autoOtp && config.handlers?.showOtpVerification != null) {
otpManager.storeVerificationToken(activeTrigger, 'mock_otp_token');
otpManager.startResendTimer();
config.handlers!.showOtpVerification!();
return CkAuthResult<TProfile>(
isSuccess: true,
requiresOtp: true,
otpTrigger: activeTrigger,
statusCode: 200,
rawResponse: const {
'message': 'Mock sign up successful, requires OTP',
},
);
} else {
return _resolvePostSignupAuth(
responseData: const {'message': 'Mock sign up successful'},
statusCode: 200,
);
}
}
final response = await CkTransport.request(
input: RequestInput(
endpoint: config.endpoints.signup,
method: config.endpoints.signupMethod,
jsonBody: body,
pathParams: pathParams,
queryParams: queryParams,
formFields: formFields,
listBody: listBody,
files: files,
headers: builtHeaders.isNotEmpty ? builtHeaders : null,
requiresToken: false,
),
responseBuilder: (data) => data,
showMessage: true,
);
if (_preSignupOtpVerified) {
_preSignupOtpVerified = false;
} else {
final otpResult = _handleOtpFlow(
CkOtpTrigger.signup,
response.data,
response.statusCode,
);
if (otpResult != null) return otpResult;
}
if (!response.isSuccess) {
_pendingLoginCallback = null;
return CkAuthResult<TProfile>.failure(
message: response.message,
statusCode: response.statusCode,
rawResponse: response.data,
);
}
return _resolvePostSignupAuth(
responseData: response.data,
statusCode: response.statusCode,
);
});
}