when<TResult extends Object?> method

  1. @optionalTypeArgs
TResult when<TResult extends Object?>({
  1. required TResult immediate(
    1. String label,
    2. String amount,
    3. bool? isPending
    ),
  2. required TResult deferred(
    1. String label,
    2. String amount,
    3. int deferredDate
    ),
  3. required TResult recurring(
    1. String label,
    2. String amount,
    3. ApplePayIntervalUnit intervalUnit,
    4. int intervalCount,
    5. int? startDate,
    6. int? endDate,
    ),
})

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 label,  String amount,  bool? isPending)  immediate,required TResult Function( String label,  String amount,  int deferredDate)  deferred,required TResult Function( String label,  String amount,  ApplePayIntervalUnit intervalUnit,  int intervalCount,  int? startDate,  int? endDate)  recurring,}) {final _that = this;
switch (_that) {
case ImmediateCartSummaryItem():
return immediate(_that.label,_that.amount,_that.isPending);case DeferredSummaryItem():
return deferred(_that.label,_that.amount,_that.deferredDate);case RecurringCartSummaryItem():
return recurring(_that.label,_that.amount,_that.intervalUnit,_that.intervalCount,_that.startDate,_that.endDate);case _:
  throw StateError('Unexpected subclass');

}
}