when<TResult extends Object?> method
- @optionalTypeArgs
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() initial,
required TResult Function(double progress) loading,
required TResult Function(T1 data1, T2 data2, T3 data3, T4 data4, T5 data5)
success,
required TResult Function(String error, bool show) failure,
}) {
final _that = this;
switch (_that) {
case _Sub5Initial():
return initial();
case _Sub5Loading():
return loading(_that.progress);
case _Sub5Success():
return success(
_that.data1, _that.data2, _that.data3, _that.data4, _that.data5);
case _Sub5Failure():
return failure(_that.error, _that.show);
case _:
throw StateError('Unexpected subclass');
}
}