when<TResult extends Object?> method

  1. @optionalTypeArgs
TResult when<TResult extends Object?>({
  1. required TResult system(
    1. String programId,
    2. ParsedSystemInstruction parsed
    ),
  2. required TResult splToken(
    1. ParsedSplTokenInstruction parsed
    ),
  3. required TResult memo(
    1. @JsonKey.new(name: 'parsed') String? memo
    ),
  4. required TResult unsupported(
    1. String? program
    ),
})

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 programId,  ParsedSystemInstruction parsed)  system,required TResult Function( ParsedSplTokenInstruction parsed)  splToken,required TResult Function(@JsonKey(name: 'parsed')  String? memo)  memo,required TResult Function( String? program)  unsupported,}) {final _that = this;
switch (_that) {
case ParsedInstructionSystem():
return system(_that.programId,_that.parsed);case ParsedInstructionSplToken():
return splToken(_that.parsed);case ParsedInstructionMemo():
return memo(_that.memo);case ParsedInstructionUnsupported():
return unsupported(_that.program);}
}