build<T> method

Future<CkResponse<T?>> build<T>({
  1. required RequestInput input,
  2. required T? responseBuilder(
    1. dynamic data
    ),
  3. required CancelToken cancelToken,
  4. required bool showMessage,
  5. required int retryCount,
  6. required int maxRetry,
})

Implementation

Future<CkResponse<T?>> build<T>({
  required RequestInput input,
  // ignore: avoid_annotating_with_dynamic
  required T? Function(dynamic data) responseBuilder,
  required CancelToken cancelToken,
  required bool showMessage,
  required int retryCount,
  required int maxRetry,
}) async {
  final dioInstance = _dio;
  if (dioInstance == null) {
    throw StateError('DioRequestBuilder not initialized. Call init() first.');
  }

  final requestOptions = await _buildOptions(
    input: input,
    retryCount: retryCount,
    maxRetry: maxRetry,
  );

  Response response;
  response = await dioInstance.request(
    requestOptions.path,
    data: requestOptions.data,
    options: requestOptions.options,
    cancelToken: cancelToken,
    onSendProgress: input.onSendProgress,
    onReceiveProgress: input.onReceiveProgress,
  );

  // if (kDebugMode) {
  //   DioUtils.log(_config, response.data.toString(), tag: input.endpoint);
  // }

  final raw = response.data;
  final extractedData = raw != null ? _responseExtractor.data(raw) : null;
  final parsed =
      extractedData != null ? responseBuilder(extractedData) : null;

  final message =
      (raw != null ? _responseExtractor.message(raw) : null) ??
      response.statusMessage;

  final meta = raw != null ? _responseExtractor.meta(raw) : null;

  if (showMessage) {
    if (response.statusCode == 200 || response.statusCode == 201) {
      DioUtils.showMessage(message ?? '', isError: false);
    } else if (response.statusCode != null && response.statusCode! >= 400) {
      DioUtils.showMessage(message ?? '', isError: true);
    }
  }

  return CkResponse(
    data: parsed,
    raw: raw,
    message: message,
    meta: meta,
    isSuccess: CkResponseExtractor.readSuccess(raw),
    cancelToken: cancelToken,
    statusCode: response.statusCode,
  );
}