feat(reproductor): restructure full player with tool-tray and EQ sheet
Restructure pantalla_reproductor.dart onto PluriPushScaffold (design ADR-2 - this screen is the documented single consumer of titleOverride, a centered live/not-playing status pill, and the non-default keyboard_arrow_down leadingIcon). Square art replaces the old circular hero, favorite moves from the AppBar into the transport row (the redundant live-indicator dot is dropped - the AppBar pill already covers that signal), the old separate info chips collapse into a single subtitle line, and a new quality row surfaces codec/bitrate with a "Cambiar" action that reconnects the current stream (this app has no per-station alternate-quality capability to invoke, so this reuses the same reproducir() call the existing error-state retry button already uses, rather than a dead button or an invented picker). The always-expanded recording panel and the standalone sleep-timer button both become tool-tray tiles (EQ propio / Grabar / sleep timer / Compartir), each opening its own bottom sheet. "EQ propio" opens a sheet hosting EcualizadorWidget - the exact same component WU13 restyled for Settings, bound via the existing presetParaEmisora/guardarPresetPorEmisora per-station persistence path. No second editor was created; the multi-device-eq resolution hierarchy is untouched. pantalla_reproductor.dart had zero test coverage before this commit (907 lines) - writing it first surfaced two pre-existing bugs blocking any coverage at all, both fixed: initState called estado.reproducir() directly, which notifies listeners synchronously before its first await and threw "setState() during build" the instant the screen mounted against a fresh Provider tree (fixed via addPostFrameCallback); and the body Column had no scrollable ancestor and overflowed even a generously tall viewport (fixed by wrapping it in a SingleChildScrollView, a real UX improvement and not just a test workaround). The three protected EQ test files (servicio_ecualizador_test.dart, estado_ecualizador_test.dart, servicio_audio_eq_reapply_test.dart) stay unmodified. Full suite: 730/730 green (2 skipped, unchanged), up from 713. size:exception - realized 1,410 changed lines (25 files including this docs update) against the 450-600 forecast: the restructured screen file alone is 658 lines (a near-total rewrite of a 907-line file, not a patch), its new test file (first-ever coverage) is 519 lines, and a new test fake plus a togglePlay() override account for the rest. Not splittable: the restructure, the tool tray, and the EQ-sheet wiring are one cohesive change to one screen.
This commit is contained in:
@@ -701,6 +701,8 @@
|
||||
"notPlaying": "Not playing",
|
||||
"oneTimeOption": "Once",
|
||||
"pausePlaybackTooltip": "Pause playback",
|
||||
"playerQualityChangeAction": "Change",
|
||||
"playerToolEqLabel": "Own EQ",
|
||||
"qualityOriginal": "Original quality: {quality}",
|
||||
"@qualityOriginal": {
|
||||
"placeholders": {
|
||||
|
||||
@@ -657,6 +657,8 @@
|
||||
"notPlaying": "No está reproduciendo",
|
||||
"oneTimeOption": "Una vez",
|
||||
"pausePlaybackTooltip": "Pausar reproducción",
|
||||
"playerQualityChangeAction": "Cambiar",
|
||||
"playerToolEqLabel": "EQ propio",
|
||||
"qualityOriginal": "Calidad original: {quality}",
|
||||
"@qualityOriginal": {"placeholders": {"quality": {}}},
|
||||
"qualityUnknown": "Calidad no informada",
|
||||
|
||||
@@ -2480,6 +2480,18 @@ abstract class AppLocalizations {
|
||||
/// **'Pausar reproducción'**
|
||||
String get pausePlaybackTooltip;
|
||||
|
||||
/// No description provided for @playerQualityChangeAction.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Cambiar'**
|
||||
String get playerQualityChangeAction;
|
||||
|
||||
/// No description provided for @playerToolEqLabel.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'EQ propio'**
|
||||
String get playerToolEqLabel;
|
||||
|
||||
/// No description provided for @qualityOriginal.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
|
||||
@@ -1360,6 +1360,12 @@ class AppLocalizationsAr extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'إيقاف مؤقت';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'الجودة الأصلية: $quality';
|
||||
|
||||
@@ -1369,6 +1369,12 @@ class AppLocalizationsBn extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'প্লেব্যাক বিরতি';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'মূল মান: $quality';
|
||||
|
||||
@@ -1377,6 +1377,12 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'Wiedergabe pausieren';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'Originalqualität: $quality';
|
||||
|
||||
@@ -1361,6 +1361,12 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'Pause playback';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Change';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'Own EQ';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'Original quality: $quality';
|
||||
|
||||
@@ -1372,6 +1372,12 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'Pausar reproducción';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'Calidad original: $quality';
|
||||
|
||||
@@ -1382,6 +1382,12 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'Mettre en pause';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'Qualité d’origine : $quality';
|
||||
|
||||
@@ -1367,6 +1367,12 @@ class AppLocalizationsHi extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'प्लेबैक रोकें';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'मूल गुणवत्ता: $quality';
|
||||
|
||||
@@ -1373,6 +1373,12 @@ class AppLocalizationsId extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'Jeda pemutaran';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'Kualitas asli: $quality';
|
||||
|
||||
@@ -1377,6 +1377,12 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'Pausa riproduzione';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'Qualità originale: $quality';
|
||||
|
||||
@@ -1329,6 +1329,12 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => '再生を一時停止';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return '元の音質: $quality';
|
||||
|
||||
@@ -1369,6 +1369,12 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'Pausar reprodução';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'Qualidade original: $quality';
|
||||
|
||||
@@ -1373,6 +1373,12 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => 'Пауза';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return 'Исходное качество: $quality';
|
||||
|
||||
@@ -1324,6 +1324,12 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
@override
|
||||
String get pausePlaybackTooltip => '暂停播放';
|
||||
|
||||
@override
|
||||
String get playerQualityChangeAction => 'Cambiar';
|
||||
|
||||
@override
|
||||
String get playerToolEqLabel => 'EQ propio';
|
||||
|
||||
@override
|
||||
String qualityOriginal(Object quality) {
|
||||
return '原始质量:$quality';
|
||||
|
||||
Reference in New Issue
Block a user