feat(escuchar): replace discovery browser with embedded player and favorites grid
Restructures PantallaInicio's top of screen: a new _EscucharHero (square art, live/offline pill, VisualizadorAudio at barras: 30 / altura: 26 / color: liveGreen, a 5-action transport row - favorite, EQ toggle, stop, play/pause, sleep - plus a tool-tray entry chip opening the full player) replaces the old PluriScreenHeader hero, and a new "Tus emisoras" section (favorites preview, capped, "Ver todas") follows it. Per design ADR-7, EstadoRadio stays the single source of truth: the hero is a StatelessWidget with no cached fields, reading emisoraActual via context.select (uuid-based equality scopes rebuilds to real station changes) and the fast-changing playback status via StreamBuilder, the same pattern _Controles/MiniReproductor already use. The still-present discovery sections (_seccionCercanas onward, including the old grid) are deliberately left in place - WU6 relocates them to Buscar and deletes them from here; removing them now would leave that content nowhere until WU6 lands. MiniReproductor gains a `visible` parameter (default true) and a measured `static const double altura`. app.dart passes `visible: indice != RaizPluriWave.escuchar.index`, hiding it visually only (SizedBox.shrink()) while Escuchar is active, since the hero already shows the same station - the State stays mounted so its didChangeDependencies side effect (configurarLocalizaciones, S3-R3) keeps running regardless of tab. altura was measured empirically (72.0, via tester.getSize) rather than guessed, backing a new derived PluriLayout.escucharBottomChromeInset constant now wired into PantallaInicio's own bottom padding. "Ver todas" switches roots via EstadoNavegacionRaiz.irA(favoritos), verified via a NavigatorObserver asserting the push count is unchanged (switches tabs, does not push). Fixed a pre-existing test-infrastructure gap while writing the anti-cache test: no test in this codebase had ever exercised ServicioAudio.androidAudioSessionIdStream against a bare FakeServicioAudio (pantalla_reproductor.dart has always read it but has no test file at all) - the real getter needs registrarHandler() (main.dart, production only) and threw otherwise. Added an empty stream override to FakeServicioAudio, matching VisualizadorAudio's own documented no-native-session fallback. Tests: 614 -> 618 (2 skipped, unchanged). flutter analyze unchanged at 1 pre-existing info. git diff empty for visualizador_audio.dart and estado_radio.dart - this WU touches neither.
This commit is contained in:
@@ -336,6 +336,11 @@
|
||||
}
|
||||
},
|
||||
"qualityHd": "HD quality",
|
||||
"yourStationsTitle": "Your stations",
|
||||
"seeAllAction": "See all",
|
||||
"openFullPlayerTooltip": "Open full player",
|
||||
"nothingPlayingTitle": "Nothing playing yet",
|
||||
"nothingPlayingSubtitle": "Pick a station from Your stations or search to start.",
|
||||
"nearYou": "Near you",
|
||||
"nearYouInCountry": "Near you · {country}",
|
||||
"@nearYouInCountry": {
|
||||
|
||||
@@ -336,6 +336,11 @@
|
||||
}
|
||||
},
|
||||
"qualityHd": "Calidad HD",
|
||||
"yourStationsTitle": "Tus emisoras",
|
||||
"seeAllAction": "Ver todas",
|
||||
"openFullPlayerTooltip": "Abrir reproductor completo",
|
||||
"nothingPlayingTitle": "Todavía no estás escuchando nada",
|
||||
"nothingPlayingSubtitle": "Elegí una emisora de Tus emisoras o buscá una para empezar.",
|
||||
"nearYou": "Cerca de vos",
|
||||
"nearYouInCountry": "Cerca de vos · {country}",
|
||||
"@nearYouInCountry": {
|
||||
|
||||
@@ -1270,6 +1270,36 @@ abstract class AppLocalizations {
|
||||
/// **'Calidad HD'**
|
||||
String get qualityHd;
|
||||
|
||||
/// No description provided for @yourStationsTitle.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Tus emisoras'**
|
||||
String get yourStationsTitle;
|
||||
|
||||
/// No description provided for @seeAllAction.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Ver todas'**
|
||||
String get seeAllAction;
|
||||
|
||||
/// No description provided for @openFullPlayerTooltip.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Abrir reproductor completo'**
|
||||
String get openFullPlayerTooltip;
|
||||
|
||||
/// No description provided for @nothingPlayingTitle.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Todavía no estás escuchando nada'**
|
||||
String get nothingPlayingTitle;
|
||||
|
||||
/// No description provided for @nothingPlayingSubtitle.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
/// **'Elegí una emisora de Tus emisoras o buscá una para empezar.'**
|
||||
String get nothingPlayingSubtitle;
|
||||
|
||||
/// No description provided for @nearYou.
|
||||
///
|
||||
/// In es, this message translates to:
|
||||
|
||||
@@ -658,6 +658,22 @@ class AppLocalizationsAr extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'جودة HD';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'بالقرب منك';
|
||||
|
||||
|
||||
@@ -662,6 +662,22 @@ class AppLocalizationsBn extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'HD গুণমান';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'আপনার কাছাকাছি';
|
||||
|
||||
|
||||
@@ -665,6 +665,22 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'HD-Qualität';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'In deiner Nähe';
|
||||
|
||||
|
||||
@@ -659,6 +659,22 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'HD quality';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Your stations';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'See all';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Open full player';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Nothing playing yet';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Pick a station from Your stations or search to start.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'Near you';
|
||||
|
||||
|
||||
@@ -663,6 +663,22 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'Calidad HD';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'Cerca de vos';
|
||||
|
||||
|
||||
@@ -667,6 +667,22 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'Qualité HD';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'Près de vous';
|
||||
|
||||
|
||||
@@ -660,6 +660,22 @@ class AppLocalizationsHi extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'HD गुणवत्ता';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'आपके पास';
|
||||
|
||||
|
||||
@@ -661,6 +661,22 @@ class AppLocalizationsId extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'Kualitas HD';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'Di dekat Anda';
|
||||
|
||||
|
||||
@@ -663,6 +663,22 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'Qualità HD';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'Vicino a te';
|
||||
|
||||
|
||||
@@ -640,6 +640,22 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'HD品質';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => '近く';
|
||||
|
||||
|
||||
@@ -662,6 +662,22 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'Qualidade HD';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'Perto de você';
|
||||
|
||||
|
||||
@@ -663,6 +663,22 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => 'HD-качество';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => 'Рядом с вами';
|
||||
|
||||
|
||||
@@ -637,6 +637,22 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
@override
|
||||
String get qualityHd => '高清音质';
|
||||
|
||||
@override
|
||||
String get yourStationsTitle => 'Tus emisoras';
|
||||
|
||||
@override
|
||||
String get seeAllAction => 'Ver todas';
|
||||
|
||||
@override
|
||||
String get openFullPlayerTooltip => 'Abrir reproductor completo';
|
||||
|
||||
@override
|
||||
String get nothingPlayingTitle => 'Todavía no estás escuchando nada';
|
||||
|
||||
@override
|
||||
String get nothingPlayingSubtitle =>
|
||||
'Elegí una emisora de Tus emisoras o buscá una para empezar.';
|
||||
|
||||
@override
|
||||
String get nearYou => '你附近';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user