feat(tutorial): add 9-screen help/tutorial carousel

Add PantallaTutorialAyuda, a PageView-based carousel covering saved
stations/groups, per-station equalizer, recording, adaptive alarms,
Android Auto favorites, auto-reconnect, snooze duration, custom
stations, and a closing summary with a "watch it again" reminder.

ServicioTutorialAyuda persists a one-time seen flag so the carousel
shows once via mostrarSiProcede, independent of entry point; the
final page's CTA label depends on the primerArranque constructor
parameter ("Empezar a escuchar" vs "Cerrar").

Translate the new copy into all 13 supported locales and update
helpSubtitle to describe the new entry point.
This commit is contained in:
2026-08-01 11:34:53 +02:00
parent d945e1a313
commit 015a20a823
34 changed files with 2262 additions and 61 deletions
+121 -1
View File
@@ -2567,9 +2567,129 @@ abstract class AppLocalizations {
/// No description provided for @helpSubtitle.
///
/// In es, this message translates to:
/// **'Repasá funciones, consejos y novedades de PluriWave.'**
/// **'9 pantallas · vuelve a verlo cuando quieras'**
String get helpSubtitle;
/// No description provided for @tutorialSkipAction.
///
/// In es, this message translates to:
/// **'Saltar'**
String get tutorialSkipAction;
/// No description provided for @tutorialNextAction.
///
/// In es, this message translates to:
/// **'Siguiente'**
String get tutorialNextAction;
/// No description provided for @tutorialPage1Headline.
///
/// In es, this message translates to:
/// **'Guarda tus emisoras y agrúpalas'**
String get tutorialPage1Headline;
/// No description provided for @tutorialPage1Body.
///
/// In es, this message translates to:
/// **'Toca el corazón para guardar una emisora. En «Tus emisoras» puedes crear grupos como «Cada mañana» o «Coche» y reordenarlas arrastrando.'**
String get tutorialPage1Body;
/// No description provided for @tutorialPage2Headline.
///
/// In es, this message translates to:
/// **'Un ecualizador base y otro por emisora'**
String get tutorialPage2Headline;
/// No description provided for @tutorialPage2Body.
///
/// In es, this message translates to:
/// **'En Ajustes defines el ecualizador general. Y desde la reproducción de una emisora concreta puedes darle su propio ajuste, que manda sobre el general.'**
String get tutorialPage2Body;
/// No description provided for @tutorialPage3Headline.
///
/// In es, this message translates to:
/// **'Graba lo que estás escuchando'**
String get tutorialPage3Headline;
/// No description provided for @tutorialPage3Body.
///
/// In es, this message translates to:
/// **'Desde la bandeja de herramientas del reproductor, «Grabar» guarda el stream original. Encuentra tus grabaciones en Ajustes Grabaciones.'**
String get tutorialPage3Body;
/// No description provided for @tutorialPage4Headline.
///
/// In es, this message translates to:
/// **'Alarmas que se adaptan a ti'**
String get tutorialPage4Headline;
/// No description provided for @tutorialPage4Body.
///
/// In es, this message translates to:
/// **'Despiértate con tu emisora favorita, pospón 3, 5 o 10 minutos, y añade rangos de vacaciones para que algunas alarmas se salten solas.'**
String get tutorialPage4Body;
/// No description provided for @tutorialPage5Headline.
///
/// In es, this message translates to:
/// **'Tus favoritas, también en el coche'**
String get tutorialPage5Headline;
/// No description provided for @tutorialPage5Body.
///
/// In es, this message translates to:
/// **'Conecta el móvil con Android Auto y encontrarás Favoritos, Todas las emisoras, Mis emisoras y tu Música Local, con botones grandes pensados para conducir.'**
String get tutorialPage5Body;
/// No description provided for @tutorialPage6Headline.
///
/// In es, this message translates to:
/// **'Se reconecta sola'**
String get tutorialPage6Headline;
/// No description provided for @tutorialPage6Body.
///
/// In es, this message translates to:
/// **'Si se corta la señal, PluriWave reintenta automáticamente y sigue mostrando tus favoritas guardadas aunque no tengas conexión.'**
String get tutorialPage6Body;
/// No description provided for @tutorialPage7Headline.
///
/// In es, this message translates to:
/// **'Elige cuánto posponer'**
String get tutorialPage7Headline;
/// No description provided for @tutorialPage7Body.
///
/// In es, this message translates to:
/// **'Cuando suene una alarma, no hay un único «posponer»: eliges 3, 5 o 10 minutos según lo que necesites en ese momento.'**
String get tutorialPage7Body;
/// No description provided for @tutorialPage8Headline.
///
/// In es, this message translates to:
/// **'¿No la encuentras? Añádela tú'**
String get tutorialPage8Headline;
/// No description provided for @tutorialPage8Body.
///
/// In es, this message translates to:
/// **'En «Tus emisoras» → Añadir emisora personalizada pega la URL del stream de una emisora que no esté en el buscador. Se guarda en «Mis emisoras», también disponible en el coche.'**
String get tutorialPage8Body;
/// No description provided for @tutorialPage9Headline.
///
/// In es, this message translates to:
/// **'Listo, ya conoces lo esencial'**
String get tutorialPage9Headline;
/// No description provided for @tutorialPage9BannerBody.
///
/// In es, this message translates to:
/// **'Para volver a ver este tutorial cuando quieras: Ajustes → Información → Ayuda y tutorial.'**
String get tutorialPage9BannerBody;
/// No description provided for @indefiniteOption.
///
/// In es, this message translates to: