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 {
  try {
    final baseRequest = await request.toBaseRequest();
    final AliceHttpCall call = AliceHttpCall(getRequestHashCode(baseRequest));
    String endpoint = "";
    String server = "";
    if (request.baseUrl.isEmpty) {
      final 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++) {
          // ignore: use_string_buffers
          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;
    }

    final AliceHttpRequest aliceHttpRequest = AliceHttpRequest();

    if (request.body == null) {
      aliceHttpRequest.size = 0;
      aliceHttpRequest.body = "";
    } else {
      aliceHttpRequest.size = utf8.encode(request.body as String).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);
  } catch (exception) {
    AliceUtils.log(exception.toString());
  }
  return request;
}