when<TResult extends Object?> method

  1. @optionalTypeArgs
TResult when<TResult extends Object?>({
  1. required TResult blocking(
    1. ModerationCauseBlocking data
    ),
  2. required TResult blockedBy(
    1. ModerationCauseBlockedBy data
    ),
  3. required TResult blockOther(
    1. ModerationCauseBlockOther data
    ),
  4. required TResult label(
    1. ModerationCauseLabel data
    ),
  5. required TResult muted(
    1. ModerationCauseMuted data
    ),
  6. required TResult muteWord(
    1. ModerationCauseMuteWord data
    ),
  7. required TResult hidden(
    1. ModerationCauseHidden data
    ),
})

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( ModerationCauseBlocking data)  blocking,required TResult Function( ModerationCauseBlockedBy data)  blockedBy,required TResult Function( ModerationCauseBlockOther data)  blockOther,required TResult Function( ModerationCauseLabel data)  label,required TResult Function( ModerationCauseMuted data)  muted,required TResult Function( ModerationCauseMuteWord data)  muteWord,required TResult Function( ModerationCauseHidden data)  hidden,}) {final _that = this;
switch (_that) {
case UModerationCauseBlocking():
return blocking(_that.data);case UModerationCauseBlockedBy():
return blockedBy(_that.data);case UModerationCauseBlockOther():
return blockOther(_that.data);case UModerationCauseLabel():
return label(_that.data);case UModerationCauseMuted():
return muted(_that.data);case UModerationCauseMuteWord():
return muteWord(_that.data);case UModerationCauseHidden():
return hidden(_that.data);case _:
  throw StateError('Unexpected subclass');

}
}