updatePlaybackState method

  1. @override
Future<void> updatePlaybackState(
  1. PlaybackState state
)
override

Updates the playback state and media position in the browser's media session.

Implementation

@override
Future<void> updatePlaybackState(PlaybackState state) async {
  try {
    final session = web.window.navigator.mediaSession;

    switch (state.status) {
      case PlaybackStatus.playing:
        session.playbackState = 'playing';
        break;
      case PlaybackStatus.paused:
        session.playbackState = 'paused';
        break;
      case PlaybackStatus.idle:
      case PlaybackStatus.ended:
      case PlaybackStatus.error:
      case PlaybackStatus.buffering:
        session.playbackState = 'none';
        break;
    }

    // browsers usually require a valid duration to display the progress bar correctly.
    final double durationSec = _currentDuration != null
        ? _currentDuration!.inMilliseconds / 1000.0
        : 0.0;

    session.setPositionState(web.MediaPositionState(
      duration: durationSec,
      playbackRate: state.speed,
      position: state.position.inMilliseconds / 1000.0,
    ));
  } catch (e) {
    // setPositionState is not supported in all browsers yet.
  }
}