when<TResult extends Object?> method

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

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