whenOrNull<TResult extends Object?> method

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

A variant of when that fallback to returning null

It is equivalent to doing:

switch (sealedClass) {
  case Subclass(:final field):
    return ...;
  case _:
    return null;
}

Implementation

@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String label,  String amount,  bool? isPending)?  immediate,TResult? Function( String label,  String amount,  int deferredDate)?  deferred,TResult? Function( String label,  String amount,  ApplePayIntervalUnit intervalUnit,  int intervalCount,  int? startDate,  int? endDate)?  recurring,}) {final _that = this;
switch (_that) {
case ImmediateCartSummaryItem() when immediate != null:
return immediate(_that.label,_that.amount,_that.isPending);case DeferredSummaryItem() when deferred != null:
return deferred(_that.label,_that.amount,_that.deferredDate);case RecurringCartSummaryItem() when recurring != null:
return recurring(_that.label,_that.amount,_that.intervalUnit,_that.intervalCount,_that.startDate,_that.endDate);case _:
  return null;

}
}