when<TResult extends Object?> method
TResult
when<TResult extends Object?>({})
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');
}
}