download method
Implementation
Future<NetworkResponse> download() async {
if (callDefaults) {
options.onStartDefault(this);
}
NetworkResponse response;
try {
log("Downloading ${jsonEncode(data)} from ${jsonEncode(api)}");
Response res = await dio.download(api, savePath, onReceiveProgress: onReceiveProgress, data: data, cancelToken: options.globalCancelToken).catchError((e) {
throw e;
}).timeout(timeOut, onTimeout: () {
throw DioExceptionType.connectionTimeout;
});
response = NetworkResponse(
responseStatus: res.statusCode! > 199 && res.statusCode! < 300,
responseCode: res.statusCode!,
responseTitle: res.statusMessage,
responseBody: res.data,
responseDetails: res,
extractedMessage: options.successMsgExtractor!(res.data));
} catch (e) {
if (e is DioException && e.response != null && e.response!.data is Map) {
response = NetworkResponse(
responseStatus: e.response!.statusCode! > 199 && e.response!.statusCode! < 300,
responseCode: e.response!.statusCode!,
responseTitle: e.response!.statusMessage,
responseBody: e.response!.data,
responseDetails: e,
extractedMessage: options.errorMsgExtractor(e.response!.data));
} else if (e is DioException && e.type == DioExceptionType.badResponse) {
response = NetworkResponse(responseStatus: false, responseCode: e.response!.statusCode!, responseTitle: e.response!.statusMessage, responseBody: e.response!.data, responseDetails: e, extractedMessage: "${e.message}");
} else if (e is DioException) {
if (e.type == DioExceptionType.unknown) {
response = NetworkResponse(
responseStatus: false,
responseCode: -500,
responseTitle: "Error",
responseBody: "Connection interrupted ,Can not Connect to Server!",
responseDetails: e,
extractedMessage: "Connection interrupted ,Can not Connect to Server!");
} else if (e.type == DioExceptionType.connectionTimeout || e.type == DioExceptionType.receiveTimeout || e.type == DioExceptionType.sendTimeout) {
response = NetworkResponse(
responseStatus: false, responseCode: -500, responseTitle: "Error", responseBody: "Connection Timeout ,Can not Reach to Server!", responseDetails: e, extractedMessage: "Connection Timeout ,Can not Reach to Server!");
} else if (e.type == DioExceptionType.cancel) {
response = NetworkResponse(responseStatus: false, responseCode: -500, responseTitle: "Error", responseBody: "Request Canceled!", responseDetails: e, extractedMessage: "Request Canceled!");
} else {
response =
NetworkResponse(responseStatus: false, responseCode: -500, responseTitle: "Error", responseBody: "Connection interrupted ,Can not Connect to Server!", responseDetails: e, extractedMessage: "Something went wrong");
}
} else {
response = NetworkResponse(responseStatus: false, responseCode: -500, responseTitle: "Failed", responseBody: "Connection interrupted ,Can not Connect to Server!", responseDetails: e, extractedMessage: e.toString());
}
}
response.isCancelable = isCancelable;
response.callDefaults = callDefaults;
response.handleSuccess = handleSuccess;
response.handleErrors = handleErrors;
response.retryFunction = retry ?? (_,__) => delete.call();
log(response.toString());
if (options.tokenExpireRule(response, this)) {
options.onTokenExpire(response, this);
response.extractedMessage = "Token Expired!";
response.responseCode = -999;
response.responseStatus = false;
}
if (!options.extraSuccessRule(response, this)) {
response.responseStatus = false;
response.responseCode = -100;
response.responseTitle = "Success Rules Failed";
}
if (callDefaults) {
if (response.responseStatus) {
options.onSuccessDefault(response, this);
} else {
options.onFailedDefault(response, this);
}
options.onEndDefault(response, this);
} else {
if (response.responseStatus) {
if (handleSuccess) {
options.onSuccessDefault(response, this);
}
} else {
if (handleErrors) {
options.onFailedDefault(response, this);
}
}
}
return response;
}