fix(chrome): rebuild MiniReproductor as a full-bleed opaque bar with art

Item 22 / audit 3.6 (t4:184-188): the mini player was a floating
999-radius glass pill with no artwork. Replace it with a 60px opaque
bar (listSurface at .97 alpha), full-bleed edge to edge, showing the
station's square 42x42 artwork instead of the abstract playing-bars
indicator. app.dart no longer wraps the bar in the balloon nav's own
8px side margin, so it now spans the full width.

MiniReproductor.altura is re-measured (72 -> 60) now that the bar's
content height is fixed by construction; PluriLayout.bottomChromeInset
derives from it as before. Both the S3-R3 configurarLocalizaciones
guard and the altura measurement test still pass unmodified.
This commit is contained in:
2026-07-30 10:38:59 +02:00
parent 2b28c4daed
commit 4537497e83
4 changed files with 386 additions and 170 deletions
+16 -13
View File
@@ -243,23 +243,26 @@ class _PaginaPrincipalState extends State<_PaginaPrincipal>
bottomNavigationBar: SafeArea(
top: false,
minimum: const EdgeInsets.only(bottom: PluriLayout.compactGap),
child: Padding(
padding: const EdgeInsets.fromLTRB(8, 0, 8, 0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
// ADR-7(b): hidden on Escuchar (index 0) only — its embedded
// hero already shows the same station. Stays mounted (visible:
// false renders SizedBox.shrink(), not tree removal) so its
// didChangeDependencies side effect (S3-R3) keeps running.
MiniReproductor(visible: indice != RaizPluriWave.escuchar.index),
PluriBottomNavigation(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
// Item 22 / audit 3.6 (t4:185 left:0;right:0): the mini player
// is full-bleed — it does NOT share the balloon bar's 8px side
// margin below. ADR-7(b): hidden on Escuchar (index 0) only —
// its embedded hero already shows the same station. Stays
// mounted (visible: false renders SizedBox.shrink(), not tree
// removal) so its didChangeDependencies side effect (S3-R3)
// keeps running.
MiniReproductor(visible: indice != RaizPluriWave.escuchar.index),
Padding(
padding: const EdgeInsets.fromLTRB(8, 0, 8, 0),
child: PluriBottomNavigation(
items: _navItems(l10n),
selectedIndex: indice,
onSelected: (i) => navegacion.irA(RaizPluriWave.values[i]),
),
],
),
),
],
),
),
);