dioCall<T extends Object> function

Future<Result<T, String>> dioCall<T extends Object>({
  1. required NetworkRquest request,
  2. OneArgFunction? onSuccess,
  3. ResponseFunction? onError,
  4. 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");
}