request<T> function
Future<Response<T>>
request<
T>( - String url, {
- Object? data,
- Map<String, dynamic>? queryParameters,
- CancelToken? cancelToken,
- Options? options,
- void onSendProgress(
- int,
- int
)?,
- void onReceiveProgress(
- int,
- int
)?,
- bool isLogin = false,
})
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,
bool isLogin = false}) 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 (!isLogin &&
dioRequest.realUri.path.endsWith("login.aspx") &&
!dioRequest.realUri.path.endsWith("unilogin.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;
}