onRequest method

  1. @override
void onRequest(
  1. RequestOptions options,
  2. RequestInterceptorHandler handler
)

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