whenOrNull<TResult extends Object?> method

  1. @optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
  1. TResult? initial()?,
  2. TResult? loading(
    1. int currentIndex
    )?,
  3. TResult? ready(
    1. int currentIndex,
    2. String currentItemId,
    3. Map<String, Player> players,
    4. Map<String, VideoController> controllers,
    5. List<MkVideoItem<T>> items,
    6. bool isPlaying,
    7. bool isMuted,
    8. bool isExpanded,
    )?,
  4. TResult? error(
    1. String message
    )?,
})

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()?  initial,TResult? Function( int currentIndex)?  loading,TResult? Function( int currentIndex,  String currentItemId,  Map<String, Player> players,  Map<String, VideoController> controllers,  List<MkVideoItem<T>> items,  bool isPlaying,  bool isMuted,  bool isExpanded)?  ready,TResult? Function( String message)?  error,}) {final _that = this;
switch (_that) {
case _MkInitial() when initial != null:
return initial();case _MkLoading() when loading != null:
return loading(_that.currentIndex);case _MkReady() when ready != null:
return ready(_that.currentIndex,_that.currentItemId,_that.players,_that.controllers,_that.items,_that.isPlaying,_that.isMuted,_that.isExpanded);case _MkError() when error != null:
return error(_that.message);case _:
  return null;

}
}