getOrCreatePlayer method
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;
}