fix(ecualizador): header switch, banner radius, preset chips, glow thumb
Audit 11.1 (t4:566): the master enable switch moves to PluriPushScaffold's header actions -- was the body's first SwitchListTile row. Its realtime/pending explainer subtitle stays behind as a plain caption so no information is lost. Audit 11.2 (t4:571): explainer banner radius is 16 (a local one-off, matching neither of the 3 named tokens), not radiusSm's 14. Audit 11.3 (t4:574-577): preset chips are solid brand-teal with dark text when active, listSurface + a faint border when not -- was Material's own ChoiceChip theming (primaryContainer/grey). Audit 11.5 (t4:585): band sliders use a new 20x20 _GlowSliderThumbShape (brand-teal blurred glow + solid thumb), replacing the Material default round thumb. Audit 11.7 (t4:584): the dB label is brand teal at 90% alpha, not liveGreen -- a leftover wrong colour family 11.6's slider-only fix never touched. Updated 2 pre-existing tests (pantalla_ajustes_ecualizador_test.dart, pantalla_ajustes_test.dart) to locate the enable switch by key instead of by the "Enable equalizer" text it no longer renders next to.
This commit is contained in:
@@ -8,6 +8,7 @@ import '../../estado/estado_radio.dart';
|
||||
import '../../l10n/gen/app_localizations.dart';
|
||||
import '../../modelos/preset_ecualizador.dart';
|
||||
import '../../tema/pluriwave_theme.dart';
|
||||
import '../../tema/pluriwave_tokens.dart';
|
||||
import '../../widgets/ecualizador_widget.dart';
|
||||
import '../../widgets/pluri_glass_surface.dart';
|
||||
import '../../widgets/pluri_layout.dart';
|
||||
@@ -36,13 +37,33 @@ class PantallaAjustesEcualizador extends StatelessWidget {
|
||||
const PantallaAjustesEcualizador({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => PluriPushScaffold(
|
||||
title: AppLocalizations.of(context).equalizerTitle,
|
||||
body: ListView(
|
||||
padding: PluriLayout.pageContentPadding,
|
||||
children: const [_CuerpoEcualizador()],
|
||||
),
|
||||
);
|
||||
Widget build(BuildContext context) {
|
||||
// Audit 11.1 (t4 line 566): the master enable switch lives in the
|
||||
// HEADER, not as the body's first row -- read here (a second,
|
||||
// cheap watch alongside _CuerpoEcualizadorState's own Consumer2)
|
||||
// purely to feed PluriPushScaffold.actions.
|
||||
final eq = context.watch<EstadoEcualizador>();
|
||||
return PluriPushScaffold(
|
||||
title: AppLocalizations.of(context).equalizerTitle,
|
||||
actions: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(right: 8),
|
||||
child: Switch(
|
||||
key: const ValueKey('eq-master-switch'),
|
||||
value: eq.activo,
|
||||
onChanged: eq.cambiarActivo,
|
||||
// t4 line 569: brand-teal track, white thumb -- the default
|
||||
// Material thumb colour already renders white when "on".
|
||||
activeTrackColor: PluriWaveTokens.brand,
|
||||
),
|
||||
),
|
||||
],
|
||||
body: ListView(
|
||||
padding: PluriLayout.pageContentPadding,
|
||||
children: const [_CuerpoEcualizador()],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _CuerpoEcualizador extends StatefulWidget {
|
||||
@@ -83,17 +104,18 @@ class _CuerpoEcualizadorState extends State<_CuerpoEcualizador> {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
SwitchListTile.adaptive(
|
||||
contentPadding: EdgeInsets.zero,
|
||||
title: Text(l10n.equalizerEnable),
|
||||
subtitle: Text(
|
||||
disponible
|
||||
? l10n.equalizerRealtimeSubtitle
|
||||
: l10n.equalizerPendingSubtitle,
|
||||
),
|
||||
value: eq.activo,
|
||||
onChanged: eq.cambiarActivo,
|
||||
// Audit 11.1 (t4 line 566): the enable switch itself now lives
|
||||
// in PluriPushScaffold's header (see PantallaAjustesEcualizador
|
||||
// above) -- this stays behind only as the explanatory caption
|
||||
// the old SwitchListTile's subtitle carried, so that
|
||||
// information is not lost.
|
||||
Text(
|
||||
disponible
|
||||
? l10n.equalizerRealtimeSubtitle
|
||||
: l10n.equalizerPendingSubtitle,
|
||||
style: Theme.of(ctx).textTheme.bodySmall,
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
if (mostrarModoPorEmisora) ...[
|
||||
const SizedBox(height: 8),
|
||||
SwitchListTile.adaptive(
|
||||
@@ -164,6 +186,12 @@ class _BannerExplicacionBase extends StatelessWidget {
|
||||
|
||||
final AppLocalizations l10n;
|
||||
|
||||
/// Audit 11.2 (t4 line 571): 16 -- doesn't match any of
|
||||
/// [PluriWaveTokens]'s three named radii (14/18/30), so this stays a
|
||||
/// local one-off constant (same precedent as `_stopButtonRadius` in
|
||||
/// `pantalla_alarma_sonando.dart`).
|
||||
static const _bannerRadius = 16.0;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final tokens = context.pluriTokens;
|
||||
@@ -172,7 +200,7 @@ class _BannerExplicacionBase extends StatelessWidget {
|
||||
padding: const EdgeInsets.all(14),
|
||||
decoration: BoxDecoration(
|
||||
color: tokens.liveGreen.withValues(alpha: 0.09),
|
||||
borderRadius: BorderRadius.circular(tokens.radiusSm),
|
||||
borderRadius: BorderRadius.circular(_bannerRadius),
|
||||
border: Border.all(color: tokens.liveGreen.withValues(alpha: 0.26)),
|
||||
),
|
||||
child: Row(
|
||||
|
||||
Reference in New Issue
Block a user