safeRequest<T> function

Future safeRequest<T>(
  1. Future<Response<T>> request, {
  2. dynamic onSuccess(
    1. T? result
    )?,
  3. dynamic onError(
    1. ErrorResponse? error
    )?,
  4. dynamic onUnknownError(
    1. dynamic error
    )?,
  5. bool showServerErrorMessage = true,
})

Implementation

Future<dynamic> safeRequest<T>(
  Future<Response<T>> request, {
  dynamic Function(T? result)? onSuccess,
  dynamic Function(ErrorResponse? error)? onError,
  dynamic Function(dynamic error)? onUnknownError,
  bool showServerErrorMessage = true,
}) async {
  try {
    final Response response = await request;
    if (response.isSuccessful) {
      return await onSuccess?.call(response.body);
    } else {
      final error = (response.error as ErrorResponse).error;
      if (showServerErrorMessage) {
        if (error == 'Unauthorized access' || error == 'Unauthorized') {
          errorToast(S.current.the_email_address_or_password_is_wrong);
        } else {
          errorToast(error!);
        }
      }
      return await onError?.call(response.error as ErrorResponse?);
    }
  } on SocketException catch (e) {
    d2('SocketException-> $e');
    errorToast(S.current.please_check_your_connection);
  } on ErrorResponse catch (e) {
    d2('ErrorResponse-> $e');
    if (showServerErrorMessage) errorToast(e.error!);

    return await onError?.call(e);
  } catch (e) {
    d2('UnknownError-> $e');
    errorToast(S.current.server_error);
    return await onUnknownError?.call(e);
  }
}