refactor(ajustes): split Settings AUDIO/EMISORAS into pushed detail screens

Moves the AUDIO group (Ecualizador, Salida de audio, Temporizador de
sueno) and the EMISORAS group (Grupos de favoritos, Emisora preferida,
Emisoras personalizadas, Orden de listas) out of pantalla_ajustes.dart
into 7 new lib/pantallas/ajustes/*.dart screens, each wrapped in
PluriPushScaffold. The root now reaches them through FilaAjuste rows
under two new GrupoAjustes cards (lib/pantallas/ajustes/widgets/
fila_ajuste.dart), per design ADR-3.

Verbatim-move rule applied throughout: only each section's panel header
(icon + title, sometimes a status chip) was removed, since the pushed
screen's own 56px header now carries the title. Two sections whose
header row carried a real action (Temporizador de sueno's "Add",
Grupos de favoritos' "Add list", Emisoras personalizadas' "Add") kept
that action in the body instead of dropping it.

size:exception (move-only diff, pre-recorded at design/tasks time):
34 files, ~4250 changed lines excluding the 13 auto-regenerated l10n
files (~90 more lines there) - higher than the 800-1000 estimate
because that estimate covered the 7 production screens but not the
matching 7 new test files (task 3a.2), one of which relocates ~10
pre-existing device-management test cases verbatim. Business logic is
untouched; app.dart's import of pantalla_ajustes.dart is unchanged.

Correction to tasks.md 3a.1/3a.8: those two lines describe the combined
WU3a+WU3b end state ("4 grouped nav lists", "<400 lines"), matching
design ADR-3's own aggregate blast-radius note - not a WU3a-only claim.
This commit converts only the 2 groups that are WU3a's job; the root
is 788 lines with 5 sections (Grabaciones, Musica local, Idioma,
Backup, Info) still inline, reachable, and unchanged, pending WU3b.

Two new ARB keys (settingsGroupAudioTitle, settingsGroupStationsTitle),
en/es only per the WU1 precedent - all 7 detail-screen titles reuse
existing keys. Discovered and worked around, without touching app
code: Directory.systemTemp hangs real dart:io writes in this sandbox,
and pumpAndSettle() cannot settle while a screen shows an indeterminate
CircularProgressIndicator - both are test-only concerns, documented
inline where hit.

Tests: 560 -> 579 (32 in this commit's scope, net +19 after retiring
13 relocated cases from the old combined pantalla_ajustes_test.dart).
flutter analyze: unchanged at 1 pre-existing info. git diff is empty
for navegacion_auto.dart, servicio_ecualizador.dart and
servicio_audio.dart; pantalla_alarma_sonando_dismiss_guard_test.dart
untouched.
This commit is contained in:
2026-07-28 21:38:20 +02:00
parent e99ecffb0c
commit bd2b7d8e02
35 changed files with 2763 additions and 1617 deletions
+2
View File
@@ -53,6 +53,8 @@
},
"settingsTitle": "Settings",
"settingsSubtitle": "Fine-grained sound control, backups, and custom stations.",
"settingsGroupAudioTitle": "AUDIO",
"settingsGroupStationsTitle": "STATIONS",
"languageSectionTitle": "Language",
"languageSectionDescription": "Choose how the app language is displayed.",
"languageSystemDefault": "System",
+2
View File
@@ -53,6 +53,8 @@
},
"settingsTitle": "Ajustes",
"settingsSubtitle": "Control fino de sonido, copias de seguridad y emisoras personalizadas.",
"settingsGroupAudioTitle": "AUDIO",
"settingsGroupStationsTitle": "EMISORAS",
"languageSectionTitle": "Idioma",
"languageSectionDescription": "Elegí cómo se muestra el idioma de la app.",
"languageSystemDefault": "Sistema",
+12
View File
@@ -274,6 +274,18 @@ abstract class AppLocalizations {
/// **'Control fino de sonido, copias de seguridad y emisoras personalizadas.'**
String get settingsSubtitle;
/// No description provided for @settingsGroupAudioTitle.
///
/// In es, this message translates to:
/// **'AUDIO'**
String get settingsGroupAudioTitle;
/// No description provided for @settingsGroupStationsTitle.
///
/// In es, this message translates to:
/// **'EMISORAS'**
String get settingsGroupStationsTitle;
/// No description provided for @languageSectionTitle.
///
/// In es, this message translates to:
+6
View File
@@ -99,6 +99,12 @@ class AppLocalizationsAr extends AppLocalizations {
String get settingsSubtitle =>
'تحكم دقيق في الصوت والنسخ الاحتياطية والمحطات المخصصة.';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => 'اللغة';
+6
View File
@@ -100,6 +100,12 @@ class AppLocalizationsBn extends AppLocalizations {
String get settingsSubtitle =>
'শব্দ, ব্যাকআপ এবং নিজস্ব স্টেশনের সূক্ষ্ম নিয়ন্ত্রণ।';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => 'ভাষা';
+6
View File
@@ -99,6 +99,12 @@ class AppLocalizationsDe extends AppLocalizations {
String get settingsSubtitle =>
'Feinabstimmung von Klang, Backups und benutzerdefinierten Sendern.';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => 'Sprache';
+6
View File
@@ -99,6 +99,12 @@ class AppLocalizationsEn extends AppLocalizations {
String get settingsSubtitle =>
'Fine-grained sound control, backups, and custom stations.';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'STATIONS';
@override
String get languageSectionTitle => 'Language';
+6
View File
@@ -99,6 +99,12 @@ class AppLocalizationsEs extends AppLocalizations {
String get settingsSubtitle =>
'Control fino de sonido, copias de seguridad y emisoras personalizadas.';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => 'Idioma';
+6
View File
@@ -100,6 +100,12 @@ class AppLocalizationsFr extends AppLocalizations {
String get settingsSubtitle =>
'Réglage précis du son, sauvegardes et stations personnalisées.';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => 'Langue';
+6
View File
@@ -99,6 +99,12 @@ class AppLocalizationsHi extends AppLocalizations {
String get settingsSubtitle =>
'ध्वनि, बैकअप और मनचाहे स्टेशनों पर बारीक नियंत्रण।';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => 'भाषा';
+6
View File
@@ -100,6 +100,12 @@ class AppLocalizationsId extends AppLocalizations {
String get settingsSubtitle =>
'Kontrol halus untuk suara, cadangan, dan stasiun khusus.';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => 'Bahasa';
+6
View File
@@ -99,6 +99,12 @@ class AppLocalizationsIt extends AppLocalizations {
String get settingsSubtitle =>
'Controllo fine del suono, backup e stazioni personalizzate.';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => 'Lingua';
+6
View File
@@ -97,6 +97,12 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get settingsSubtitle => '音質、バックアップ、カスタム局を細かく管理します。';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => '言語';
+6
View File
@@ -99,6 +99,12 @@ class AppLocalizationsPt extends AppLocalizations {
String get settingsSubtitle =>
'Controle fino de som, backups e estações personalizadas.';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => 'Idioma';
+6
View File
@@ -99,6 +99,12 @@ class AppLocalizationsRu extends AppLocalizations {
String get settingsSubtitle =>
'Точная настройка звука, резервных копий и пользовательских станций.';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => 'Язык';
+6
View File
@@ -97,6 +97,12 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get settingsSubtitle => '精细控制声音、备份和自定义电台。';
@override
String get settingsGroupAudioTitle => 'AUDIO';
@override
String get settingsGroupStationsTitle => 'EMISORAS';
@override
String get languageSectionTitle => '语言';