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. 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. 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);}
}