request<T> function

Future<Response<T>> request<T>(
  1. String url, {
  2. Object? data,
  3. Map<String, dynamic>? queryParameters,
  4. CancelToken? cancelToken,
  5. Options? options,
  6. void onSendProgress(
    1. int,
    2. int
    )?,
  7. void onReceiveProgress(
    1. int,
    2. int
    )?,
})

Implementation

Future<Response<T>> request<T>(String url,
    {Object? data,
    Map<String, dynamic>? queryParameters,
    CancelToken? cancelToken,
    Options? options,
    void Function(int, int)? onSendProgress,
    void Function(int, int)? onReceiveProgress}) async {
  Response<T>? dioRequest;
  const referHeader = {"Referer": "https://www.lectio.dk"};
  if (options == null) {
    options = Options(headers: referHeader);
  } else if (options.headers == null) {
    options.headers = referHeader;
  } else {
    Map<String, dynamic> newHeaders =
        options.headers?.map((key, value) => MapEntry(key, value)) ?? {};
    newHeaders.addAll(referHeader);
    options.headers = newHeaders;
  }
  try {
    dioRequest = await _lppDio.request<T>(url,
        data: data,
        onReceiveProgress: onReceiveProgress,
        onSendProgress: onSendProgress,
        queryParameters: queryParameters,
        cancelToken: cancelToken,
        options: options);
    if (dioRequest.realUri.path.endsWith("login.aspx") &&
        !url.endsWith("login.aspx")) {
      throw LoginException();
    }
  } on DioException catch (e) {
    if (e.error is RedirectException) {
      dioRequest = await _retryRequestWithLogin(url,
          data: data,
          queryParameters: queryParameters,
          cancelToken: cancelToken,
          onReceiveProgress: onReceiveProgress,
          onSendProgress: onSendProgress,
          options: options);
    } else {
      rethrow;
    }
  } on RedirectException {
    dioRequest = await _retryRequestWithLogin(url,
        data: data,
        queryParameters: queryParameters,
        cancelToken: cancelToken,
        onReceiveProgress: onReceiveProgress,
        onSendProgress: onSendProgress,
        options: options);
  } on LoginException {
    dioRequest = await _retryRequestWithLogin(url,
        data: data,
        queryParameters: queryParameters,
        cancelToken: cancelToken,
        onReceiveProgress: onReceiveProgress,
        onSendProgress: onSendProgress,
        options: options);
  } catch (e) {
    rethrow;
  }
  if (dioRequest == null) {
    throw Exception("Request went wrong");
  }
  return dioRequest;
}