whenOrNull<TResult extends Object?> method

  1. @optionalTypeArgs
TResult? whenOrNull<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
    )?,
})

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(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,
}) {
  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 null;
  }
}