when<TResult extends Object?> method

  1. @optionalTypeArgs
TResult when<TResult extends Object?>(
  1. TResult $default(
    1. String id,
    2. TenvioDispatchGuideStatus status,
    3. String? qrCode,
    4. Asset? warehouse,
    5. String? warehouseId,
    6. TenvioDriver? driver,
    7. String? driverId,
    8. User? loader,
    9. String? loaderId,
    10. List<TenvioPackage> packages,
    11. List<String> packagesIds,
    12. bool hasRoute,
    13. List<String> route,
    14. DateTime createdAt,
    15. DateTime updatedAt,
    )
)

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?>(TResult Function( String id, @TenvioDispatchGuideStatusConverter()  TenvioDispatchGuideStatus status,  String? qrCode,  Asset? warehouse,  String? warehouseId,  TenvioDriver? driver,  String? driverId,  User? loader,  String? loaderId,  List<TenvioPackage> packages,  List<String> packagesIds,  bool hasRoute,  List<String> route, @TimestampConverter()  DateTime createdAt, @TimestampConverter()  DateTime updatedAt)  $default,) {final _that = this;
switch (_that) {
case _TenvioDispatchGuide():
return $default(_that.id,_that.status,_that.qrCode,_that.warehouse,_that.warehouseId,_that.driver,_that.driverId,_that.loader,_that.loaderId,_that.packages,_that.packagesIds,_that.hasRoute,_that.route,_that.createdAt,_that.updatedAt);case _:
  throw StateError('Unexpected subclass');

}
}