dioCall<T extends Object> function
Future<Result<T, String> >
dioCall<T extends Object>({
- required NetworkRquest request,
- OneArgFunction? onSuccess,
- ResponseFunction? onError,
- String? errorSubject,
DIO network request wrapper that handles checking response and packaging result or error message. Returns an oxidizer Result.
Implementation
Future<Result<T, String>> dioCall<T extends Object>(
{required NetworkRquest request,
OneArgFunction? onSuccess,
ResponseFunction? onError,
String? errorSubject}) async {
try {
final response = await request();
if (response.statusCode != 200 || response.data == null) {
if (onError != null) {
onError(response: response);
}
final detailMessage = response.data != null ? ": ${response.data}" : '';
return Err(
"${response.statusCode}: ${response.statusMessage}$detailMessage");
}
if (onSuccess != null) {
onSuccess(response.data!);
}
return Ok(response.data!);
} on DioError catch (dioError) {
//logger.i("DioError: ${dioError.message}");
if (dioError.error is Exception) {
if (onError != null) {
onError(exception: dioError.error);
}
return Err('internet not available');
}
if (onError != null) {
onError(dioError: dioError);
}
return Err(
translateErrorMessage(dioError: dioError, subject: errorSubject));
// } on SocketException catch (e) {
// logger.i("SocketException: ${e.message}");
// if (onError != null) {
// onError(exception: e);
// }
} on Exception catch (e) {
//logger.i("Exception: ${e.toString()}");
if (onError != null) {
onError(exception: e);
}
}
return Err("error loading $errorSubject");
}