build<T> method
Future<CkResponse<T?> >
build<T>({
- required RequestInput input,
- required T? responseBuilder(
- dynamic data
- required CancelToken cancelToken,
- required bool showMessage,
- required int retryCount,
- 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,
);
}