maybeWhen<TResult extends Object?> method

  1. @optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
  1. TResult network(
    1. String url,
    2. ImageParams params
    )?,
  2. TResult base64(
    1. String base64Code,
    2. ImageParams params
    )?,
  3. TResult filePath(
    1. String filePath,
    2. ImageParams params
    )?,
  4. TResult asset(
    1. String assetPath,
    2. ImageParams params
    )?,
  5. required TResult orElse(),
})

A variant of when that fallback to an orElse callback.

It is equivalent to doing:

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

Implementation

@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
  TResult Function(String url, ImageParams params)? network,
  TResult Function(String base64Code, ImageParams params)? base64,
  TResult Function(String filePath, ImageParams params)? filePath,
  TResult Function(String assetPath, ImageParams params)? asset,
  required TResult orElse(),
}) {
  final _that = this;
  switch (_that) {
    case MyNetworkImage() when network != null:
      return network(_that.url, _that.params);
    case MyBase64Image() when base64 != null:
      return base64(_that.base64Code, _that.params);
    case MyFilePathImage() when filePath != null:
      return filePath(_that.filePath, _that.params);
    case MyAssetImage() when asset != null:
      return asset(_that.assetPath, _that.params);
    case _:
      return orElse();
  }
}