onRequest method

  1. @override
FutureOr<Request> onRequest(
  1. Request request
)

Handles chopper request and creates alice http call

Implementation

@override
FutureOr<chopper.Request> onRequest(chopper.Request request) async {
  var baseRequest = await request.toBaseRequest();
  AliceHttpCall call = AliceHttpCall(getRequestHashCode(baseRequest));
  String endpoint = "";
  String server = "";
  if (request.baseUrl.isEmpty) {
    List<String> split = request.url.split("/");
    if (split.length > 2) {
      server = split[1] + split[2];
    }
    if (split.length > 4) {
      endpoint = "/";
      for (int splitIndex = 3; splitIndex < split.length; splitIndex++) {
        endpoint += split[splitIndex] + "/";
      }
      endpoint = endpoint.substring(0, endpoint.length - 1);
    }
  } else {
    endpoint = request.url;
    server = request.baseUrl;
  }

  call.method = request.method;
  call.endpoint = endpoint;
  call.server = server;
  call.client = "Chopper";
  if (request.baseUrl.contains("https") || request.url.contains("https")) {
    call.secure = true;
  }

  AliceHttpRequest aliceHttpRequest = AliceHttpRequest();

  if (request.body == null) {
    aliceHttpRequest.size = 0;
    aliceHttpRequest.body = "";
  } else {
    aliceHttpRequest.size = utf8.encode(request.body).length;
    aliceHttpRequest.body = request.body;
  }
  aliceHttpRequest.time = DateTime.now();
  aliceHttpRequest.headers = request.headers;

  String? contentType = "unknown";
  if (request.headers.containsKey("Content-Type")) {
    contentType = request.headers["Content-Type"];
  }
  aliceHttpRequest.contentType = contentType;
  aliceHttpRequest.queryParameters = request.parameters;

  call.request = aliceHttpRequest;
  call.response = AliceHttpResponse();

  aliceCore.addCall(call);
  return request;
}