signUp method

Future<CkAuthResult<TProfile>> signUp({
  1. Map<String, dynamic>? body,
  2. List<String>? pathParams,
  3. Map<String, dynamic>? queryParams,
  4. Map<String, dynamic>? formFields,
  5. List<Map<String, dynamic>>? listBody,
  6. Map<String, dynamic>? files,
  7. Map<String, String>? headers,
  8. LoginCallback? loginCallback,
})

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,
    );
  });
}