getOrCreatePlayer method

AudioPlayer getOrCreatePlayer(
  1. String id, {
  2. String? url,
})

Returns or creates a player for id.

Implementation

AudioPlayer getOrCreatePlayer(String id, {String? url}) {
  if (_players.containsKey(id)) return _players[id]!;

  final player = AudioPlayer();
  _players[id] = player;
  _states[id] = AudioPlaybackState();

  // Preload URL if given
  if (url != null && url.isNotEmpty) {
    unawaited(player.setSourceUrl(url));
  }

  // Track player state
  player.onPlayerStateChanged.listen((state) {
    final s = _states[id];
    if (s == null) return;
    s.isPlaying = state == PlayerState.playing;
    // If the player stopped unexpectedly, notify UI
    if (state == PlayerState.stopped || state == PlayerState.completed) {
      _notifyStop(id);
    }
  });

  player.onDurationChanged.listen((d) {
    _states[id]?.durationMs = d.inMilliseconds.toDouble();
  });

  player.onPositionChanged.listen((p) {
    _states[id]?.positionMs = p.inMilliseconds.toDouble();
  });

  player.onPlayerComplete.listen((_) {
    final s = _states[id];
    if (s == null) return;
    s.isPlaying = false;
    s.positionMs = 0.0;
    _notifyStop(id);
  });

  return player;
}