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) {
  final call = NetworkHttpCall(options.hashCode);

  final uri = options.uri;
  call.method = options.method;
  var path = options.uri.path;
  if (path.isEmpty) path = '/';
  call
    ..endpoint = path
    ..server = uri.host
    ..client = 'Dio'
    ..uri = options.uri.toString();

  if (uri.scheme == 'https') call.secure = true;

  final request = NetworkHttpRequest();

  final dynamic data = options.data;
  if (data == null) {
    request
      ..size = 0
      ..body = '';
  } else {
    if (data is FormData) {
      request.body += 'Form data';
      if (data.fields.isNotEmpty == true) {
        final fields = <NetworkFormDataField>[];
        for (var entry in data.fields) {
          fields.add(NetworkFormDataField(entry.key, entry.value));
        }
        request.formDataFields = fields;
      }
      if (data.files.isNotEmpty == true) {
        final files = <NetworkFormDataFile>[];
        for (var entry in data.files) {
          files.add(
            NetworkFormDataFile(
              entry.value.filename,
              entry.value.contentType.toString(),
              entry.value.length,
            ),
          );
        }
        request.formDataFiles = files;
      }
    } else {
      request
        ..size = utf8.encode(data.toString()).length
        ..body = data;
    }
  }

  request
    ..time = DateTime.now()
    ..headers = NetworkParser.parseHeaders(headers: options.headers)
    ..contentType = options.contentType.toString()
    ..queryParameters = uri.queryParameters;

  call
    ..request = request
    ..response = NetworkHttpResponse();

  networkCore.addCall(call);
  handler.next(options);
}