fix(ci): resolve premium UI analyzer errors
Build & Deploy Pluriwave / Build APK + AAB release (push) Has been skipped
Build & Deploy Pluriwave / Análisis de código (push) Failing after 9s

This commit is contained in:
2026-05-20 20:07:24 +02:00
parent c707fc9911
commit 9c51454d57
9 changed files with 535 additions and 287 deletions
+55 -22
View File
@@ -9,7 +9,7 @@ import 'pluri_glass_surface.dart';
import 'pluri_icon.dart';
import 'visualizador_audio.dart';
/// Barra inferior persistente con controles básicos de reproducción.
/// Barra inferior persistente con controles básicos de reproducción.
/// Toca la barra para abrir PantallaReproductor completa.
class MiniReproductor extends StatelessWidget {
const MiniReproductor({super.key});
@@ -26,9 +26,17 @@ class MiniReproductor extends StatelessWidget {
return SafeArea(
top: false,
child: Padding(
padding: EdgeInsets.fromLTRB(t.spacingMd, t.spacingSm, t.spacingMd, t.spacingSm),
padding: EdgeInsets.fromLTRB(
t.spacingMd,
t.spacingSm,
t.spacingMd,
t.spacingSm,
),
child: PluriGlassSurface(
padding: EdgeInsets.symmetric(horizontal: t.spacingSm, vertical: t.spacingXs),
padding: EdgeInsets.symmetric(
horizontal: t.spacingSm,
vertical: t.spacingXs,
),
borderRadius: BorderRadius.circular(999),
child: Row(
children: [
@@ -67,27 +75,37 @@ class MiniReproductor extends StatelessWidget {
children: [
Text(
emisora.nombre,
style: Theme.of(context).textTheme.titleSmall?.copyWith(
fontWeight: FontWeight.w700,
),
style: Theme.of(context)
.textTheme
.titleSmall
?.copyWith(fontWeight: FontWeight.w700),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
StreamBuilder<EstadoReproduccion>(
stream: estado.estadoStream,
builder: (context, snapshot) {
final s = snapshot.data ?? EstadoReproduccion.detenido;
final activo = s == EstadoReproduccion.reproduciendo;
final s =
snapshot.data ??
EstadoReproduccion.detenido;
final activo =
s == EstadoReproduccion.reproduciendo;
return Text(
_labelEstado(s),
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: activo
? t.warmCoral
: Theme.of(context)
.colorScheme
.onSurface
.withValues(alpha: 0.7),
fontWeight: activo ? FontWeight.w600 : FontWeight.w400,
style: Theme.of(
context,
).textTheme.bodySmall?.copyWith(
color:
activo
? t.warmCoral
: Theme.of(context)
.colorScheme
.onSurface
.withValues(alpha: 0.7),
fontWeight:
activo
? FontWeight.w600
: FontWeight.w400,
),
);
},
@@ -128,16 +146,28 @@ class MiniReproductor extends StatelessWidget {
return IconButton(
tooltip: 'Reintentar',
icon: const Icon(Icons.refresh_rounded),
onPressed: emisoraActual != null ? () => estado.reproducir(emisoraActual) : null,
constraints: const BoxConstraints.tightFor(width: 48, height: 48),
onPressed:
emisoraActual != null
? () => estado.reproducir(emisoraActual)
: null,
constraints: const BoxConstraints.tightFor(
width: 48,
height: 48,
),
);
}
return Semantics(
button: true,
label: s == EstadoReproduccion.reproduciendo ? 'Pausar' : 'Reproducir',
label:
s == EstadoReproduccion.reproduciendo
? 'Pausar'
: 'Reproducir',
child: IconButton(
tooltip: s == EstadoReproduccion.reproduciendo ? 'Pausar' : 'Reproducir',
tooltip:
s == EstadoReproduccion.reproduciendo
? 'Pausar'
: 'Reproducir',
icon: Icon(
s == EstadoReproduccion.reproduciendo
? Icons.pause_circle_filled_rounded
@@ -145,7 +175,10 @@ class MiniReproductor extends StatelessWidget {
color: t.electricMagenta,
),
onPressed: estado.togglePlay,
constraints: const BoxConstraints.tightFor(width: 48, height: 48),
constraints: const BoxConstraints.tightFor(
width: 48,
height: 48,
),
),
);
},
@@ -162,7 +195,7 @@ class MiniReproductor extends StatelessWidget {
EstadoReproduccion.cargando => 'Conectando...',
EstadoReproduccion.reproduciendo => 'En directo',
EstadoReproduccion.pausado => 'Pausado',
EstadoReproduccion.error => 'Error de conexión',
EstadoReproduccion.error => 'Error de conexión',
EstadoReproduccion.detenido => 'Detenido',
};
}