when<TResult extends Object?> method

  1. @optionalTypeArgs
TResult when<TResult extends Object?>({
  1. required TResult error(
    1. Error error
    ),
  2. required TResult block(
    1. BlockMsgType msgType,
    2. String blockHash,
    3. int blockHeight,
    4. Int64 blockTimestamp,
    5. CoinbaseData? coinbaseData,
    ),
  3. required TResult tx(
    1. TxMsgType msgType,
    2. String txid,
    3. TxFinalizationReasonType? finalizationReasonType
    ),
})

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( pb.Error error)  error,required TResult Function( BlockMsgType msgType,  String blockHash,  int blockHeight,  Int64 blockTimestamp,  pb.CoinbaseData? coinbaseData)  block,required TResult Function( TxMsgType msgType,  String txid,  TxFinalizationReasonType? finalizationReasonType)  tx,}) {final _that = this;
switch (_that) {
case WsErrorMsg():
return error(_that.error);case WsMsgBlockClient():
return block(_that.msgType,_that.blockHash,_that.blockHeight,_that.blockTimestamp,_that.coinbaseData);case WsMsgTxClient():
return tx(_that.msgType,_that.txid,_that.finalizationReasonType);}
}