maybeMap<TResult extends Object?> method

  1. @optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
  1. TResult user(
    1. MessageOriginUser value
    )?,
  2. TResult hiddenUser(
    1. MessageOriginHiddenUser value
    )?,
  3. TResult chat(
    1. MessageOriginChat value
    )?,
  4. TResult channel(
    1. MessageOriginChannel value
    )?,
  5. required TResult orElse(),
})

A variant of map that fallback to returning orElse.

It is equivalent to doing:

switch (sealedClass) {
  case final Subclass value:
    return ...;
  case _:
    return orElse();
}

Implementation

@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
  TResult Function(MessageOriginUser value)? user,
  TResult Function(MessageOriginHiddenUser value)? hiddenUser,
  TResult Function(MessageOriginChat value)? chat,
  TResult Function(MessageOriginChannel value)? channel,
  required TResult orElse(),
}) {
  final _that = this;
  switch (_that) {
    case MessageOriginUser() when user != null:
      return user(_that);
    case MessageOriginHiddenUser() when hiddenUser != null:
      return hiddenUser(_that);
    case MessageOriginChat() when chat != null:
      return chat(_that);
    case MessageOriginChannel() when channel != null:
      return channel(_that);
    case _:
      return orElse();
  }
}