onRequest method
Called when the request is about to be sent.
Implementation
@override
void onRequest(
RequestOptions options, RequestInterceptorHandler handler) async {
if (ApiLogger.instance.isLogEnabled == true) {
final old = ApiLogger.instance.getRequestModel(options);
RequestModel? requestModel;
try {
if (old != null) {
requestModel = old;
} else {
requestModel = RequestModel();
requestModel.url = options.uri.toString();
final mockApi = ApiLogger.instance.getMockApi(options.uri.toString());
requestModel.url = options.uri.toString();
if (mockApi?.type == MockType.url) {
options.method = mockApi!.httpMethod!;
options.baseUrl = '';
if (mockApi.type == MockType.url) {
options.path = mockApi.mockUrl!;
}
}
requestModel.id = getRequestId();
requestModel.startTime = DateTime.now().millisecondsSinceEpoch;
requestModel.method = options.method;
ApiLogger.instance.addMapRequestOption(options, requestModel);
}
requestModel.queryParams = Map.from(options.uri.queryParameters);
requestModel.requestHeader = options.headers;
if (options.data is FormData) {
var formData = options.data as FormData;
requestModel.requestBody = options.data;
final List<UploadFile> files = [];
for (var e in formData.files) {
final uploadFile = UploadFile(
key: e.key,
size: e.value.length,
fileName: e.value.filename,
contentType: e.value.contentType?.mimeType ?? '',
path: e.value.headers?['path']?.firstOrNull);
requestModel.totalFilesSize =
(requestModel.totalFilesSize ?? 0) + e.value.length;
files.add(uploadFile);
e.value.headers?.remove('path');
}
requestModel.uploadFiles = files;
} else {
requestModel.requestBody = options.data;
}
requestModel.curl = _logRequestAsCurl(options);
ApiLogger.instance.addMapRequestOption(options, requestModel);
} catch (e, stack) {
Completer().completeError(e, stack);
} finally {
if (isNotNullOrEmpty(requestModel)) {
ApiLogger.instance.addRequest(requestModel!, options);
}
}
}
return handler.next(options);
}