build method

  1. @override
GlobalPlayerState build()

Implementation

@override
GlobalPlayerState build() {
  // Keep player state alive across route transitions to avoid restarting media.
  ref.keepAlive();

  ref.onDispose(() {
    PipMode.isInPipMode.removeListener(_onPipModeChanged);
    unawaited(_disposeControllers());
  });

  PipMode.isInPipMode.addListener(_onPipModeChanged);

  // Link system media controls to our provider
  mediaHandler?.onPlayCallback = () async => togglePlayPause();
  mediaHandler?.onPauseCallback = () async => togglePlayPause();
  mediaHandler?.onStopCallback = () async => stop();
  mediaHandler?.onSeekCallback = (pos) async => state.videoPlayerController?.seekTo(pos);
  mediaHandler?.onSkipToNextCallback = () async => playNext();

  final prefs = ref.read(sharedPreferencesProvider);
  return GlobalPlayerState(
    autoplayNext: prefs.getBool(_autoplayNextKey) ?? false,
    showVideoDebugInfo: prefs.getBool(_showVideoDebugInfoKey) ?? false,
    useDoubleTapSeek: prefs.getBool(_useDoubleTapSeekKey) ?? true,
    enableBackgroundPlayback:
        prefs.getBool(_enableBackgroundPlaybackKey) ?? false,
    enableNativePip: prefs.getBool(_enableNativePipKey) ?? false,
    isInPipMode: PipMode.isInPipMode.value,
  );
}