fix(player): restore stable audio switching
Build & Deploy Pluriwave / Análisis de código (push) Successful in 11s
Build & Deploy Pluriwave / Build APK + AAB release (push) Successful in 1m19s

This commit is contained in:
2026-05-20 23:55:54 +02:00
parent abea51ba3f
commit be0d6c5a9e
2 changed files with 10 additions and 26 deletions
-1
View File
@@ -304,7 +304,6 @@ class EstadoRadio extends ChangeNotifier {
Future<void> reproducir(Emisora emisora) async { Future<void> reproducir(Emisora emisora) async {
try { try {
notifyListeners();
await audio.reproducir(emisora); await audio.reproducir(emisora);
unawaited(radio.registrarClick(emisora.uuid)); unawaited(radio.registrarClick(emisora.uuid));
await _aplicarPresetActivo(_presetParaEmisora(emisora.uuid)); await _aplicarPresetActivo(_presetParaEmisora(emisora.uuid));
+10 -25
View File
@@ -106,7 +106,6 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
PresetEcualizador _presetActual = PresetEcualizador.flat; PresetEcualizador _presetActual = PresetEcualizador.flat;
PresetEcualizador get presetActual => _presetActual; PresetEcualizador get presetActual => _presetActual;
int _playRequestId = 0;
PluriWaveAudioHandler() { PluriWaveAudioHandler() {
_setupStreams(); _setupStreams();
@@ -215,27 +214,15 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
@override @override
Future<void> playMediaItem(MediaItem mediaItem) async { Future<void> playMediaItem(MediaItem mediaItem) async {
final requestId = ++_playRequestId;
this.mediaItem.add(mediaItem); this.mediaItem.add(mediaItem);
emisoraActual = _emisoraDesdeMediaItem(mediaItem);
playbackState.add(playbackState.value.copyWith(
processingState: AudioProcessingState.loading,
playing: false,
errorMessage: null,
));
try { try {
await _player.stop(); await _player.stop();
if (requestId != _playRequestId) return;
await _player.setUrl(mediaItem.id); await _player.setUrl(mediaItem.id);
if (requestId != _playRequestId) return;
await _player.play(); await _player.play();
if (requestId == _playRequestId) { emisoraActual = _emisoraDesdeMediaItem(mediaItem);
await _activarEcualizador(); await _activarEcualizador();
}
} on PlayerException catch (e) { } on PlayerException catch (e) {
if (requestId == _playRequestId) { _gestionarErrorReproduccion(e);
_gestionarErrorReproduccion(e);
}
throw Exception(_mensajeAmigable(e)); throw Exception(_mensajeAmigable(e));
} on Exception catch (e) { } on Exception catch (e) {
developer.log( developer.log(
@@ -243,15 +230,13 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
name: 'ServicioAudio', name: 'ServicioAudio',
level: 900, level: 900,
); );
if (requestId == _playRequestId) { playbackState.add(playbackState.value.copyWith(
playbackState.add(playbackState.value.copyWith( processingState: AudioProcessingState.error,
processingState: AudioProcessingState.error, playing: false,
playing: false, errorMessage: 'Error inesperado al reproducir',
errorMessage: 'Error inesperado al reproducir', ));
)); emisoraActual = null;
emisoraActual = null; this.mediaItem.add(null);
this.mediaItem.add(null);
}
rethrow; rethrow;
} }
} }