onboarding copy

This commit is contained in:
2026-01-17 22:20:34 +01:00
parent e83bb02be8
commit 59d566e9a6
15 changed files with 87 additions and 67 deletions

View File

@@ -14,17 +14,17 @@ class OnboardingPage {
const List<OnboardingPage> onboardingPages = <OnboardingPage>[ const List<OnboardingPage> onboardingPages = <OnboardingPage>[
OnboardingPage( OnboardingPage(
image: 'assets/images/ui/bienvenida_paso1.svg', image: 'assets/images/ui/real_time_device_location.svg',
title: I18n.onboardingTitle1, title: I18n.onboardingTitle1,
subtitle: I18n.onboardingSubtitle1, subtitle: I18n.onboardingSubtitle1,
), ),
OnboardingPage( OnboardingPage(
image: 'assets/images/ui/bienvenida_paso2.svg', image: 'assets/images/ui/safety_zone.svg',
title: I18n.onboardingTitle2, title: I18n.onboardingTitle2,
subtitle: I18n.onboardingSubtitle2, subtitle: I18n.onboardingSubtitle2,
), ),
OnboardingPage( OnboardingPage(
image: 'assets/images/ui/bienvenida_paso3.svg', image: 'assets/images/ui/chat.svg',
title: I18n.onboardingTitle3, title: I18n.onboardingTitle3,
subtitle: I18n.onboardingSubtitle3, subtitle: I18n.onboardingSubtitle3,
), ),

View File

@@ -5,6 +5,7 @@ import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fonts/fonts.dart';
import 'package:navigation/navigation.dart'; import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart'; import 'package:sf_localizations/sf_localizations.dart';
@@ -41,7 +42,7 @@ class OnboardingScreen extends ConsumerWidget {
} }
return Scaffold( return Scaffold(
backgroundColor: Colors.white, backgroundColor: Color.fromRGBO(247, 247, 247, 1),
body: Padding( body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 24), padding: const EdgeInsets.symmetric(horizontal: 24),
child: Column( child: Column(
@@ -64,7 +65,7 @@ class OnboardingScreen extends ConsumerWidget {
StepIndicator( StepIndicator(
current: state.cardIndex + 1, current: state.cardIndex + 1,
total: onboardingPages.length, total: onboardingPages.length,
color: const Color(0xFF4A4A4A), color: Color.fromRGBO(88, 142, 165, 1),
), ),
const SizedBox(height: 38), const SizedBox(height: 38),
Container( Container(
@@ -74,24 +75,30 @@ class OnboardingScreen extends ConsumerWidget {
onPressed: goToNext, onPressed: goToNext,
style: TextButton.styleFrom( style: TextButton.styleFrom(
backgroundColor: isLast backgroundColor: isLast
? const Color(0xFF329E95) ? const Color.fromRGBO(88, 142, 165, 1)
: const Color(0xFF333333), : const Color.fromRGBO(255, 255, 255, 1),
foregroundColor: Colors.white, foregroundColor: isLast
? const Color.fromRGBO(255, 255, 255, 1)
: const Color.fromRGBO(88, 142, 165, 1),
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(
vertical: 16, vertical: 16,
horizontal: 24, horizontal: 24,
), ),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18), borderRadius: BorderRadius.circular(18),
side: const BorderSide(
color: Color.fromRGBO(88, 142, 165, 1),
width: 3,
),
), ),
), ),
child: Text( child: Text(
isLast isLast
? context.translate(I18n.start) ? context.translate(I18n.start)
: context.translate(I18n.next), : context.translate(I18n.next),
style: const TextStyle( style: AppFonts.stolzlStyle(
fontSize: 18, size: 18,
fontWeight: FontWeight.w600, weight: FontWeight.w600,
), ),
), ),
), ),
@@ -107,11 +114,11 @@ class OnboardingScreen extends ConsumerWidget {
navigationContract.goTo(AppRoutes.linkPhone), navigationContract.goTo(AppRoutes.linkPhone),
child: Text( child: Text(
context.translate(I18n.skip), context.translate(I18n.skip),
style: TextStyle( style: AppFonts.stolzlStyle(
color: Color(0xFF333333), color: Color.fromRGBO(88, 142, 165, 1),
decoration: TextDecoration.underline, decoration: TextDecoration.underline,
fontWeight: FontWeight.w500, weight: FontWeight.w600,
fontSize: 18, size: 18,
), ),
), ),
), ),

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:fonts/fonts.dart';
import 'package:sf_localizations/sf_localizations.dart'; import 'package:sf_localizations/sf_localizations.dart';
class OnboardingContent extends StatelessWidget { class OnboardingContent extends StatelessWidget {
@@ -21,28 +22,35 @@ class OnboardingContent extends StatelessWidget {
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Flexible(flex: 3, child: SvgPicture.asset(image)), SvgPicture.asset(image, height: 250),
const SizedBox(height: 48), const SizedBox(height: 48),
Text( Text(
context.translate(title), context.translate(title),
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: const TextStyle( style: AppFonts.stolzlStyle(
fontWeight: FontWeight.w700, size: 28,
fontSize: 28, weight: FontWeight.w700,
color: const Color(0xFF4A4A4A),
height: 1.4, height: 1.4,
letterSpacing: 0.3, letterSpacing: 0.3,
color: Color(0xFF4A4A4A),
), ),
// style: const TextStyle(
// fontWeight: FontWeight.w700,
// fontSize: 28,
// height: 1.4,
// letterSpacing: 0.3,
// color: Color(0xFF4A4A4A),
// ),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
Text( Text(
context.translate(subtitle), context.translate(subtitle),
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: const TextStyle( style: AppFonts.stolzlStyle(
fontSize: 18, size: 18,
height: 1.4, height: 1.4,
letterSpacing: 0.3, letterSpacing: 0.3,
color: Color(0xFF9B9B9B), color: const Color(0xFF333333),
), ),
), ),
], ],

View File

@@ -80,7 +80,7 @@ class AccountCreatedScreen extends ConsumerWidget {
PrimaryButton( PrimaryButton(
onPressed: () => navigationContract.goTo(AppRoutes.login), onPressed: () => navigationContract.goTo(AppRoutes.login),
text: context.translate(I18n.accountCreatedContinue), text: context.translate(I18n.accountCreatedContinue),
color: theme.getColorFor(ThemeCode.buttonPrimary), color: Color.fromRGBO(88, 142, 165, 1),
), ),
const Spacer(flex: 8), const Spacer(flex: 8),
], ],

View File

@@ -226,7 +226,7 @@ class SecretCodeScreen extends ConsumerWidget {
} }
}, },
text: context.translate(I18n.secretCodeConfigure), text: context.translate(I18n.secretCodeConfigure),
color: theme.getColorFor(ThemeCode.buttonPrimary), color: Color.fromRGBO(88, 142, 165, 1),
), ),
], ],
), ),

View File

@@ -99,7 +99,7 @@ class SignUpLayout extends StatelessWidget {
onPressed: onNextPressed, onPressed: onNextPressed,
text: "Siguiente", text: "Siguiente",
size: 16, size: 16,
color: theme.getColorFor(ThemeCode.buttonSecondary), color: Color.fromRGBO(88, 142, 165, 1),
), ),
), ),
], ],

View File

@@ -26,6 +26,8 @@ dependencies:
path: ../../packages/sf_infrastructure path: ../../packages/sf_infrastructure
utils: utils:
path: ../../packages/utils path: ../../packages/utils
fonts:
path: ../../packages/fonts
#dependencies go here #dependencies go here
flutter_svg: ^2.2.1 flutter_svg: ^2.2.1
get_it: ^9.0.5 get_it: ^9.0.5

View File

@@ -33,10 +33,12 @@ class SecondaryButton extends StatelessWidget {
padding: WidgetStatePropertyAll( padding: WidgetStatePropertyAll(
EdgeInsets.symmetric(horizontal: padding), EdgeInsets.symmetric(horizontal: padding),
), ),
side: const WidgetStatePropertyAll(
BorderSide(color: Color.fromRGBO(88, 142, 165, 1), width: 1),
),
shape: WidgetStatePropertyAll( shape: WidgetStatePropertyAll(
RoundedRectangleBorder( RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(radius)), borderRadius: BorderRadius.all(Radius.circular(radius)),
side: BorderSide(color: Color(0xFF4B4B4B)),
), ),
), ),
), ),
@@ -53,15 +55,14 @@ class SecondaryButton extends StatelessWidget {
style: TextStyle( style: TextStyle(
fontSize: size ?? 18, fontSize: size ?? 18,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
letterSpacing: 0, color: const Color.fromRGBO(88, 142, 165, 1),
color: Color(0xFF4B4B4B),
), ),
) )
: Icon( : Icon(
icon, icon,
semanticLabel: label, semanticLabel: label,
size: size ?? 24, size: size ?? 24,
color: color ?? Color(0xFF4B4B4B), color: color ?? const Color.fromRGBO(88, 142, 165, 1),
), ),
), ),
), ),

View File

@@ -27,7 +27,9 @@ class ThemeSfAdapter extends ThemePort {
List<List<Color>> get cardColors => _cardColors; List<List<Color>> get cardColors => _cardColors;
final List<Color> _disabledCardColors = [ final List<Color> _disabledCardColors = [
Color(0xFF989797), Color(0xFF797676), Color(0xFF5F5A5A) Color(0xFF989797),
Color(0xFF797676),
Color(0xFF5F5A5A),
]; ];
@override @override

View File

@@ -3,12 +3,12 @@
"start": "Starten", "start": "Starten",
"next": "Weiter", "next": "Weiter",
"skip": "Überspringen", "skip": "Überspringen",
"onboardingTitle1": "Lerne, ihr Geld zu verwalten", "onboardingTitle1": "Echtzeit-Standort des Geräts",
"onboardingSubtitle1": "Dein Kind entwickelt Gewohnheiten und hat Spaß dabei", "onboardingSubtitle1": "Verpassen Sie nichts.\nGreifen Sie überall und jederzeit in Echtzeit auf den Standort Ihres Geräts zu.",
"onboardingTitle2": "Gelassenheit bei jeder Zahlung", "onboardingTitle2": "Sicherheitszone",
"onboardingSubtitle2": "Überwache ihre Ausgaben, setze Limits und begleite sie bei jedem Schritt", "onboardingSubtitle2": "Kontrolle in Ihrer Hand.\nLegen Sie einen Bereich fest, und wir benachrichtigen Sie, sobald das Gerät Ihre Sicherheitszone verlässt.",
"onboardingTitle3": "Einfache und sichere Zahlungen in ihren Händen", "onboardingTitle3": "Chat",
"onboardingSubtitle3": "Sie können mit ihrer Uhr bezahlen.\nGanz ohne Handy und Bargeld", "onboardingSubtitle3": "Immer verbunden.\nÜber den Chat können Sie jederzeit mit dem Besitzer des Geräts kommunizieren.",
"linkPhoneTitle": "Wir freuen uns sehr, dass du hier bist!", "linkPhoneTitle": "Wir freuen uns sehr, dass du hier bist!",
"linkPhoneSubtitle": "Um dich sicher anzumelden, senden wir dir einen Code an deine Telefonnummer", "linkPhoneSubtitle": "Um dich sicher anzumelden, senden wir dir einen Code an deine Telefonnummer",
"mobilePhone": "Mobiltelefon", "mobilePhone": "Mobiltelefon",

View File

@@ -1,11 +1,11 @@
{ {
"example": "example", "example": "example",
"onboardingTitle1": "Learn to manage their money", "onboardingTitle1": "Real-time device location",
"onboardingSubtitle1": "Your kid builds habits and has fun while doing it", "onboardingSubtitle1": "Don't miss a thing.\nAccess your device's location in real time wherever you are.",
"onboardingTitle2": "Peace of mind in every payment", "onboardingTitle2": "Safety Zone",
"onboardingSubtitle2": "Monitor their spending, set limits and guide them step by step", "onboardingSubtitle2": "Control in your hands.\nChoose a perimeter and we'll alert you when the device leaves your secure zone.",
"onboardingTitle3": "Easy and secure payments in their hands", "onboardingTitle3": "Chat",
"onboardingSubtitle3": "They can pay from their watch.\nNo phone or cash needed", "onboardingSubtitle3": "Always connected.\nThrough the chat you can communicate with the owner of the device whenever you want.",
"start": "Start", "start": "Start",
"next": "Next", "next": "Next",
"skip": "Skip", "skip": "Skip",

View File

@@ -1,11 +1,11 @@
{ {
"example": "ejemplo", "example": "ejemplo",
"onboardingTitle1": "Aprende a gestionar su dinero", "onboardingTitle1": "Ubicación del dispositivo en tiempo real",
"onboardingSubtitle1": "Tu peque crea hábitos y se divierte mientras lo hace", "onboardingSubtitle1": "No te pierdas nada.\nAccede a la ubicación de tu dispositivo en tiempo real estés donde estés.",
"onboardingTitle2": "Tranquilidad en cada pago que hacen", "onboardingTitle2": "Zona segura",
"onboardingSubtitle2": "Supervisa sus gastos, fija límites y acompáñalos en cada paso", "onboardingSubtitle2": "El control en tus manos.\nElige un perímetro y te avisaremos cuando el dispositivo salga de tu zona segura.",
"onboardingTitle3": "Pagos fáciles y seguros en sus manos", "onboardingTitle3": "Chat",
"onboardingSubtitle3": "Podrá pagar desde su reloj.\nSin móvil ni efectivo", "onboardingSubtitle3": "Siempre conectados.\nA través del chat puedes comunicarte con el propietario del dispositivo cuando quieras.",
"start": "Comenzar", "start": "Comenzar",
"next": "Siguiente", "next": "Siguiente",
"skip": "Omitir", "skip": "Omitir",

View File

@@ -3,12 +3,12 @@
"start": "Commencer", "start": "Commencer",
"next": "Suivant", "next": "Suivant",
"skip": "Passer", "skip": "Passer",
"onboardingTitle1": "Apprenez à gérer leur argent", "onboardingTitle1": "Localisation de l'appareil en temps réel",
"onboardingSubtitle1": "Votre enfant développe de bonnes habitudes et s'amuse en le faisant", "onboardingSubtitle1": "Ne manquez rien.\nAccédez à la localisation de votre appareil en temps réel, où que vous soyez.",
"onboardingTitle2": "La tranquillité à chaque paiement", "onboardingTitle2": "Zone de sécurité",
"onboardingSubtitle2": "Surveillez leurs dépenses, fixez des limites et accompagnez-les à chaque étape", "onboardingSubtitle2": "Le contrôle entre vos mains.\nDéfinissez un périmètre et nous vous avertirons lorsque l'appareil quitte votre zone de sécurité.",
"onboardingTitle3": "Des paiements faciles et sécurisés entre leurs mains", "onboardingTitle3": "Chat",
"onboardingSubtitle3": "Ils peuvent payer avec leur montre.\nSans téléphone ni espèces", "onboardingSubtitle3": "Toujours connectés.\nVia le chat, vous pouvez communiquer avec le propriétaire de l'appareil quand vous le souhaitez.",
"linkPhoneTitle": "Nous sommes ravis de te compter parmi nous !", "linkPhoneTitle": "Nous sommes ravis de te compter parmi nous !",
"linkPhoneSubtitle": "Pour te connecter en toute sécurité, nous allons envoyer un code sur ton téléphone", "linkPhoneSubtitle": "Pour te connecter en toute sécurité, nous allons envoyer un code sur ton téléphone",
"mobilePhone": "Téléphone portable", "mobilePhone": "Téléphone portable",

View File

@@ -3,12 +3,12 @@
"start": "Inizia", "start": "Inizia",
"next": "Avanti", "next": "Avanti",
"skip": "Salta", "skip": "Salta",
"onboardingTitle1": "Impara a gestire il loro denaro", "onboardingTitle1": "Posizione del dispositivo in tempo reale",
"onboardingSubtitle1": "Tuo figlio crea abitudini e si diverte mentre lo fa", "onboardingSubtitle1": "Non perderti nulla.\nAccedi alla posizione del tuo dispositivo in tempo reale, ovunque tu sia.",
"onboardingTitle2": "Tranquillità in ogni pagamento", "onboardingTitle2": "Zona di sicurezza",
"onboardingSubtitle2": "Monitora le sue spese, imposta limiti e accompagnalo in ogni passo", "onboardingSubtitle2": "Il controllo nelle tue mani.\nScegli un perimetro e ti avviseremo quando il dispositivo esce dalla tua zona sicura.",
"onboardingTitle3": "Pagamenti facili e sicuri nelle sue mani", "onboardingTitle3": "Chat",
"onboardingSubtitle3": "Potrà pagare dal suo orologio.\nSenza telefono né contanti", "onboardingSubtitle3": "Sempre connessi.\nTramite la chat puoi comunicare con il proprietario del dispositivo quando vuoi.",
"linkPhoneTitle": "Siamo molto felici di averti qui!", "linkPhoneTitle": "Siamo molto felici di averti qui!",
"linkPhoneSubtitle": "Per accedere in modo sicuro, ti invieremo un codice al tuo telefono", "linkPhoneSubtitle": "Per accedere in modo sicuro, ti invieremo un codice al tuo telefono",
"mobilePhone": "Telefono cellulare", "mobilePhone": "Telefono cellulare",

View File

@@ -3,12 +3,12 @@
"start": "Começar", "start": "Começar",
"next": "Próximo", "next": "Próximo",
"skip": "Pular", "skip": "Pular",
"onboardingTitle1": "Aprenda a gerenciar o dinheiro deles", "onboardingTitle1": "Localização do dispositivo em tempo real",
"onboardingSubtitle1": "Seu filho cria hábitos e se diverte enquanto faz isso", "onboardingSubtitle1": "Não perca nada.\nAcesse a localização do seu dispositivo em tempo real, onde quer que você esteja.",
"onboardingTitle2": "Tranquilidade em cada pagamento", "onboardingTitle2": "Zona segura",
"onboardingSubtitle2": "Monitore os gastos deles, defina limites e acompanhe cada passo", "onboardingSubtitle2": "O controlo nas suas mãos.\nEscolha um perímetro e avisaremos quando o dispositivo sair da sua zona segura.",
"onboardingTitle3": "Pagamentos fáceis e seguros nas mãos deles", "onboardingTitle3": "Chat",
"onboardingSubtitle3": "Eles poderão pagar pelo relógio.\nSem celular nem dinheiro em espécie", "onboardingSubtitle3": "Sempre conectados.\nPelo chat, você pode se comunicar com o proprietário do dispositivo quando quiser.",
"linkPhoneTitle": "Ficamos muito felizes em ter você aqui!", "linkPhoneTitle": "Ficamos muito felizes em ter você aqui!",
"linkPhoneSubtitle": "Para entrar com segurança, vamos enviar um código para o seu telefone", "linkPhoneSubtitle": "Para entrar com segurança, vamos enviar um código para o seu telefone",
"mobilePhone": "Telefone celular", "mobilePhone": "Telefone celular",