when<TResult extends Object?> method

  1. @optionalTypeArgs
TResult when<TResult extends Object?>({
  1. required TResult server(
    1. String? message
    ),
  2. required TResult network(
    1. String? message
    ),
  3. required TResult unauthorized(
    1. String? message
    ),
  4. required TResult timeout(
    1. String? message
    ),
  5. required TResult cache(
    1. String? message
    ),
  6. required TResult unexpected(
    1. String? message
    ),
})

A switch-like method, using callbacks.

As opposed to map, this offers destructuring. It is equivalent to doing:

switch (sealedClass) {
  case Subclass(:final field):
    return ...;
  case Subclass2(:final field2):
    return ...;
}

Implementation

@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String? message)  server,required TResult Function( String? message)  network,required TResult Function( String? message)  unauthorized,required TResult Function( String? message)  timeout,required TResult Function( String? message)  cache,required TResult Function( String? message)  unexpected,}) {final _that = this;
switch (_that) {
case ServerFailure():
return server(_that.message);case NetworkFailure():
return network(_that.message);case UnauthorizedFailure():
return unauthorized(_that.message);case TimeoutFailure():
return timeout(_that.message);case CacheFailure():
return cache(_that.message);case UnexpectedFailure():
return unexpected(_that.message);case _:
  throw StateError('Unexpected subclass');

}
}