fix(ui): unify scroll and improve playback switching
Build & Deploy Pluriwave / Análisis de código (push) Successful in 12s
Build & Deploy Pluriwave / Build APK + AAB release (push) Successful in 1m17s

This commit is contained in:
2026-05-20 23:44:14 +02:00
parent 34022e0814
commit 10520fef48
5 changed files with 138 additions and 191 deletions
+20 -18
View File
@@ -106,7 +106,7 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
PresetEcualizador _presetActual = PresetEcualizador.flat;
PresetEcualizador get presetActual => _presetActual;
Future<void> _colaReproduccion = Future<void>.value();
int _playRequestId = 0;
PluriWaveAudioHandler() {
_setupStreams();
@@ -214,14 +214,8 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
}
@override
Future<void> playMediaItem(MediaItem mediaItem) {
_colaReproduccion = _colaReproduccion
.catchError((_) {})
.then((_) => _playMediaItemSerializado(mediaItem));
return _colaReproduccion;
}
Future<void> _playMediaItemSerializado(MediaItem mediaItem) async {
Future<void> playMediaItem(MediaItem mediaItem) async {
final requestId = ++_playRequestId;
this.mediaItem.add(mediaItem);
emisoraActual = _emisoraDesdeMediaItem(mediaItem);
playbackState.add(playbackState.value.copyWith(
@@ -231,11 +225,17 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
));
try {
await _player.stop();
if (requestId != _playRequestId) return;
await _player.setUrl(mediaItem.id);
if (requestId != _playRequestId) return;
await _player.play();
await _activarEcualizador();
if (requestId == _playRequestId) {
await _activarEcualizador();
}
} on PlayerException catch (e) {
_gestionarErrorReproduccion(e);
if (requestId == _playRequestId) {
_gestionarErrorReproduccion(e);
}
throw Exception(_mensajeAmigable(e));
} on Exception catch (e) {
developer.log(
@@ -243,13 +243,15 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
name: 'ServicioAudio',
level: 900,
);
playbackState.add(playbackState.value.copyWith(
processingState: AudioProcessingState.error,
playing: false,
errorMessage: 'Error inesperado al reproducir',
));
emisoraActual = null;
this.mediaItem.add(null);
if (requestId == _playRequestId) {
playbackState.add(playbackState.value.copyWith(
processingState: AudioProcessingState.error,
playing: false,
errorMessage: 'Error inesperado al reproducir',
));
emisoraActual = null;
this.mediaItem.add(null);
}
rethrow;
}
}