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 {
try {
notifyListeners();
await audio.reproducir(emisora);
unawaited(radio.registrarClick(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 get presetActual => _presetActual;
int _playRequestId = 0;
PluriWaveAudioHandler() {
_setupStreams();
@@ -215,27 +214,15 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
@override
Future<void> playMediaItem(MediaItem mediaItem) async {
final requestId = ++_playRequestId;
this.mediaItem.add(mediaItem);
emisoraActual = _emisoraDesdeMediaItem(mediaItem);
playbackState.add(playbackState.value.copyWith(
processingState: AudioProcessingState.loading,
playing: false,
errorMessage: null,
));
try {
await _player.stop();
if (requestId != _playRequestId) return;
await _player.setUrl(mediaItem.id);
if (requestId != _playRequestId) return;
await _player.play();
if (requestId == _playRequestId) {
await _activarEcualizador();
}
emisoraActual = _emisoraDesdeMediaItem(mediaItem);
await _activarEcualizador();
} on PlayerException catch (e) {
if (requestId == _playRequestId) {
_gestionarErrorReproduccion(e);
}
_gestionarErrorReproduccion(e);
throw Exception(_mensajeAmigable(e));
} on Exception catch (e) {
developer.log(
@@ -243,15 +230,13 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
name: 'ServicioAudio',
level: 900,
);
if (requestId == _playRequestId) {
playbackState.add(playbackState.value.copyWith(
processingState: AudioProcessingState.error,
playing: false,
errorMessage: 'Error inesperado al reproducir',
));
emisoraActual = null;
this.mediaItem.add(null);
}
playbackState.add(playbackState.value.copyWith(
processingState: AudioProcessingState.error,
playing: false,
errorMessage: 'Error inesperado al reproducir',
));
emisoraActual = null;
this.mediaItem.add(null);
rethrow;
}
}