whenOrNull<TResult extends Object?> method

  1. @optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
  1. TResult? text(
    1. String content,
    2. String format
    )?,
  2. TResult? card(
    1. String id,
    2. RichImage? image,
    3. String title,
    4. String? subtitle,
    5. String? description,
    6. Map<String, String>? metadata,
    7. List<RichAction>? actions,
    )?,
  3. TResult? carousel(
    1. String id,
    2. List<RichComponent> items,
    3. CarouselConfig? config
    )?,
  4. TResult? productList(
    1. String id,
    2. List<RichComponent> items,
    3. ProductListConfig? config
    )?,
  5. TResult? image(
    1. String id,
    2. String url,
    3. String? alt,
    4. String? caption,
    5. String? aspectRatio,
    6. List<RichAction>? actions,
    )?,
  6. TResult? buttonGroup(
    1. String id,
    2. List<RichButton> buttons,
    3. String layout
    )?,
})

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 content,  String format)?  text,TResult? Function( String id,  RichImage? image,  String title,  String? subtitle,  String? description, @JsonKey(fromJson: _metadataFromJson)  Map<String, String>? metadata,  List<RichAction>? actions)?  card,TResult? Function( String id,  List<RichComponent> items,  CarouselConfig? config)?  carousel,TResult? Function( String id,  List<RichComponent> items,  ProductListConfig? config)?  productList,TResult? Function( String id,  String url,  String? alt,  String? caption, @JsonKey(name: 'aspect_ratio')  String? aspectRatio,  List<RichAction>? actions)?  image,TResult? Function( String id,  List<RichButton> buttons,  String layout)?  buttonGroup,}) {final _that = this;
switch (_that) {
case TextComponent() when text != null:
return text(_that.content,_that.format);case CardComponent() when card != null:
return card(_that.id,_that.image,_that.title,_that.subtitle,_that.description,_that.metadata,_that.actions);case CarouselComponent() when carousel != null:
return carousel(_that.id,_that.items,_that.config);case ProductListComponent() when productList != null:
return productList(_that.id,_that.items,_that.config);case ImageComponent() when image != null:
return image(_that.id,_that.url,_that.alt,_that.caption,_that.aspectRatio,_that.actions);case ButtonGroupComponent() when buttonGroup != null:
return buttonGroup(_that.id,_that.buttons,_that.layout);case _:
  return null;

}
}