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