whenOrNull<TResult extends Object?> method

  1. @optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
  1. TResult? cancel(
    1. @igFreezedJson Object? error,
    2. @igFreezedJson RequestOptions? options
    )?,
  2. TResult? connectionTimeout()?,
  3. TResult? sendTimeout()?,
  4. TResult? receiveTimeout()?,
  5. TResult? badCertificate()?,
  6. TResult? connectionError()?,
  7. TResult? badResponse(
    1. @igFreezedJson Response? response,
    2. int? statusCode
    )?,
  8. TResult? businessException(
    1. String message,
    2. @igFreezedJson Object? error,
    3. @igFreezedJson StackTrace? stackTrace
    )?,
})

A variant of when that fallback to returning null

It is equivalent to doing:

switch (sealedClass) {
  case Subclass(:final field):
    return ...;
  case _:
    return null;
}

Implementation

@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
  TResult? Function(@igFreezedJson Object? error,
          @igFreezedJson RequestOptions? options)?
      cancel,
  TResult? Function()? connectionTimeout,
  TResult? Function()? sendTimeout,
  TResult? Function()? receiveTimeout,
  TResult? Function()? badCertificate,
  TResult? Function()? connectionError,
  TResult? Function(@igFreezedJson Response? response, int? statusCode)?
      badResponse,
  TResult? Function(String message, @igFreezedJson Object? error,
          @igFreezedJson StackTrace? stackTrace)?
      businessException,
}) {
  final _that = this;
  switch (_that) {
    case BaseApiCancelException() when cancel != null:
      return cancel(_that.error, _that.options);
    case BaseApiConnectionTimeoutException() when connectionTimeout != null:
      return connectionTimeout();
    case BaseApiSendTimeoutException() when sendTimeout != null:
      return sendTimeout();
    case BaseApiReceiveTimeoutException() when receiveTimeout != null:
      return receiveTimeout();
    case BaseApiBadCertificateException() when badCertificate != null:
      return badCertificate();
    case BaseApiConnectionErrorException() when connectionError != null:
      return connectionError();
    case BaseApiBadResponseException() when badResponse != null:
      return badResponse(_that.response, _that.statusCode);
    case BaseApiBusinessException() when businessException != null:
      return businessException(_that.message, _that.error, _that.stackTrace);
    case _:
      return null;
  }
}