From ee26c78d82e1e7c141354df0f1ae5a08b5d41a73 Mon Sep 17 00:00:00 2001 From: freetlab Date: Thu, 21 May 2026 00:23:59 +0200 Subject: [PATCH] fix(player): handle play errors on station switch --- lib/servicios/servicio_audio.dart | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/lib/servicios/servicio_audio.dart b/lib/servicios/servicio_audio.dart index 85573eb..f6ffec0 100644 --- a/lib/servicios/servicio_audio.dart +++ b/lib/servicios/servicio_audio.dart @@ -223,9 +223,9 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler { errorMessage: null, )); try { - await _player.stop(); + await _resetearPlayerParaNuevaEmisora(); await _player.setUrl(mediaItem.id); - unawaited(_player.play()); + _iniciarPlaybackSeguro(mediaItem); await _activarEcualizador(); } on PlayerException catch (e) { _gestionarErrorReproduccion(e); @@ -247,6 +247,31 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler { } } + Future _resetearPlayerParaNuevaEmisora() async { + try { + await _player.stop(); + await _player.seek(Duration.zero); + } catch (_) { + await _player.stop(); + } + } + + void _iniciarPlaybackSeguro(MediaItem item) { + unawaited( + _player.play().catchError((Object error, StackTrace stackTrace) { + developer.log( + '[PluriWave] Error al iniciar play: $error', + name: 'ServicioAudio', + level: 900, + stackTrace: stackTrace, + ); + if (mediaItem.value?.id == item.id) { + _gestionarErrorReproduccion(error); + } + }), + ); + } + Future _activarEcualizador() async { try { final params = await _eq.parameters;