feat: Add localization for staff main tabs and enhance profile UI components

This commit is contained in:
Achintha Isuru
2026-01-24 14:38:06 -05:00
parent 6c72c2d9fd
commit 96ab07b58d
8 changed files with 91 additions and 39 deletions

View File

@@ -367,6 +367,15 @@
} }
, ,
"staff": { "staff": {
"main": {
"tabs": {
"shifts": "Shifts",
"payments": "Payments",
"home": "Home",
"clock_in": "Clock In",
"profile": "Profile"
}
},
"home": { "home": {
"header": { "header": {
"welcome_back": "Welcome back", "welcome_back": "Welcome back",

View File

@@ -367,6 +367,15 @@
} }
, ,
"staff": { "staff": {
"main": {
"tabs": {
"shifts": "Turnos",
"payments": "Pagos",
"home": "Inicio",
"clock_in": "Marcar Entrada",
"profile": "Perfil"
}
},
"home": { "home": {
"header": { "header": {
"welcome_back": "Welcome back", "welcome_back": "Welcome back",
@@ -452,15 +461,51 @@
"refer": { "title": "Refer a Friend", "page": "/worker-profile" } "refer": { "title": "Refer a Friend", "page": "/worker-profile" }
} }
} }
} },
}, "profile": {
"staff_main": { "header": {
"tabs": { "title": "Perfil",
"shifts": "Shifts", "sign_out": "CERRAR SESIÓN"
"payments": "Payments", },
"home": "Home", "reliability_stats": {
"clock_in": "Clock In", "shifts": "Turnos",
"profile": "Profile" "rating": "Calificación",
"on_time": "A Tiempo",
"no_shows": "Faltas",
"cancellations": "Cancel."
},
"reliability_score": {
"title": "Puntuación de Confiabilidad",
"description": "Mantén tu puntuación por encima del 45% para continuar aceptando turnos."
},
"sections": {
"onboarding": "INCORPORACIÓN",
"compliance": "CUMPLIMIENTO",
"level_up": "MEJORAR NIVEL",
"finance": "FINANZAS",
"support": "SOPORTE"
},
"menu_items": {
"personal_info": "Información Personal",
"emergency_contact": "Contacto de Emergencia",
"experience": "Experiencia",
"attire": "Vestimenta",
"documents": "Documentos",
"certificates": "Certificados",
"tax_forms": "Formularios Fiscales",
"krow_university": "Krow University",
"trainings": "Capacitaciones",
"leaderboard": "Tabla de Clasificación",
"bank_account": "Cuenta Bancaria",
"payments": "Pagos",
"timecard": "Tarjeta de Tiempo",
"faqs": "Preguntas Frecuentes",
"privacy_security": "Privacidad y Seguridad",
"messages": "Mensajes"
},
"logout": {
"button": "Cerrar Sesión"
}
} }
} }
} }

View File

@@ -1,7 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart' hide ReadContext; import 'package:flutter_bloc/flutter_bloc.dart' hide ReadContext;
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:lucide_icons/lucide_icons.dart';
import 'package:core_localization/core_localization.dart'; import 'package:core_localization/core_localization.dart';
import 'package:design_system/design_system.dart'; import 'package:design_system/design_system.dart';
@@ -63,7 +62,7 @@ class StaffProfilePage extends StatelessWidget {
} }
return SingleChildScrollView( return SingleChildScrollView(
padding: const EdgeInsets.only(bottom: 100), padding: const EdgeInsets.only(bottom: UiConstants.space16),
child: Column( child: Column(
children: [ children: [
ProfileHeader( ProfileHeader(
@@ -99,25 +98,25 @@ class StaffProfilePage extends StatelessWidget {
ProfileMenuGrid( ProfileMenuGrid(
children: [ children: [
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.user, icon: UiIcons.user,
label: i18n.menu_items.personal_info, label: i18n.menu_items.personal_info,
completed: profile.hasPersonalInfo, completed: profile.hasPersonalInfo,
onTap: () => Modular.to.pushPersonalInfo(), onTap: () => Modular.to.pushPersonalInfo(),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.phone, icon: UiIcons.phone,
label: i18n.menu_items.emergency_contact, label: i18n.menu_items.emergency_contact,
completed: profile.hasEmergencyContact, completed: profile.hasEmergencyContact,
onTap: () => Modular.to.pushEmergencyContact(), onTap: () => Modular.to.pushEmergencyContact(),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.briefcase, icon: UiIcons.briefcase,
label: i18n.menu_items.experience, label: i18n.menu_items.experience,
completed: profile.hasExperience, completed: profile.hasExperience,
onTap: () => Modular.to.pushExperience(), onTap: () => Modular.to.pushExperience(),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.shirt, icon: UiIcons.user,
label: i18n.menu_items.attire, label: i18n.menu_items.attire,
completed: profile.hasAttire, completed: profile.hasAttire,
onTap: () => Modular.to.pushAttire(), onTap: () => Modular.to.pushAttire(),
@@ -130,19 +129,19 @@ class StaffProfilePage extends StatelessWidget {
crossAxisCount: 3, crossAxisCount: 3,
children: [ children: [
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.fileText, icon: UiIcons.file,
label: i18n.menu_items.documents, label: i18n.menu_items.documents,
completed: profile.hasDocuments, completed: profile.hasDocuments,
onTap: () => Modular.to.pushDocuments(), onTap: () => Modular.to.pushDocuments(),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.award, icon: UiIcons.shield,
label: i18n.menu_items.certificates, label: i18n.menu_items.certificates,
completed: profile.hasCertificates, completed: profile.hasCertificates,
onTap: () => Modular.to.pushCertificates(), onTap: () => Modular.to.pushCertificates(),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.fileText, icon: UiIcons.file,
label: i18n.menu_items.tax_forms, label: i18n.menu_items.tax_forms,
completed: profile.hasTaxForms, completed: profile.hasTaxForms,
onTap: () => Modular.to.pushTaxForms(), onTap: () => Modular.to.pushTaxForms(),
@@ -155,17 +154,17 @@ class StaffProfilePage extends StatelessWidget {
crossAxisCount: 3, crossAxisCount: 3,
children: [ children: [
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.graduationCap, icon: UiIcons.sparkles,
label: i18n.menu_items.krow_university, label: i18n.menu_items.krow_university,
onTap: () => Modular.to.pushKrowUniversity(), onTap: () => Modular.to.pushKrowUniversity(),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.bookOpen, icon: UiIcons.briefcase,
label: i18n.menu_items.trainings, label: i18n.menu_items.trainings,
onTap: () => Modular.to.pushTrainings(), onTap: () => Modular.to.pushTrainings(),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.award, icon: UiIcons.target,
label: i18n.menu_items.leaderboard, label: i18n.menu_items.leaderboard,
onTap: () => Modular.to.pushLeaderboard(), onTap: () => Modular.to.pushLeaderboard(),
), ),
@@ -177,17 +176,17 @@ class StaffProfilePage extends StatelessWidget {
crossAxisCount: 3, crossAxisCount: 3,
children: [ children: [
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.building2, icon: UiIcons.building,
label: i18n.menu_items.bank_account, label: i18n.menu_items.bank_account,
onTap: () => Modular.to.pushBankAccount(), onTap: () => Modular.to.pushBankAccount(),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.creditCard, icon: UiIcons.creditCard,
label: i18n.menu_items.payments, label: i18n.menu_items.payments,
onTap: () => Modular.to.navigate('/payments'), onTap: () => Modular.to.navigate('/payments'),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.clock, icon: UiIcons.clock,
label: i18n.menu_items.timecard, label: i18n.menu_items.timecard,
onTap: () => Modular.to.pushTimecard(), onTap: () => Modular.to.pushTimecard(),
), ),
@@ -199,17 +198,17 @@ class StaffProfilePage extends StatelessWidget {
crossAxisCount: 3, crossAxisCount: 3,
children: [ children: [
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.helpCircle, icon: UiIcons.help,
label: i18n.menu_items.faqs, label: i18n.menu_items.faqs,
onTap: () => Modular.to.pushFaqs(), onTap: () => Modular.to.pushFaqs(),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.shield, icon: UiIcons.shield,
label: i18n.menu_items.privacy_security, label: i18n.menu_items.privacy_security,
onTap: () => Modular.to.pushPrivacy(), onTap: () => Modular.to.pushPrivacy(),
), ),
ProfileMenuItem( ProfileMenuItem(
icon: LucideIcons.messageCircle, icon: UiIcons.messageCircle,
label: i18n.menu_items.messages, label: i18n.menu_items.messages,
onTap: () => Modular.to.pushMessages(), onTap: () => Modular.to.pushMessages(),
), ),

View File

@@ -18,12 +18,12 @@ class LogoutButton extends StatelessWidget {
return Container( return Container(
width: double.infinity, width: double.infinity,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: UiColors.bgPopup,
borderRadius: BorderRadius.circular(UiConstants.radiusBase), borderRadius: BorderRadius.circular(UiConstants.radiusBase),
border: Border.all(color: UiColors.border), border: Border.all(color: UiColors.border),
), ),
child: Material( child: Material(
color: Colors.transparent, color: const Color(0x00000000),
child: InkWell( child: InkWell(
onTap: onTap, onTap: onTap,
borderRadius: BorderRadius.circular(UiConstants.radiusBase), borderRadius: BorderRadius.circular(UiConstants.radiusBase),

View File

@@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:lucide_icons/lucide_icons.dart';
import 'package:core_localization/core_localization.dart'; import 'package:core_localization/core_localization.dart';
import 'package:design_system/design_system.dart'; import 'package:design_system/design_system.dart';
@@ -80,7 +79,7 @@ class ProfileHeader extends StatelessWidget {
Container( Container(
width: 112, width: 112,
height: 112, height: 112,
padding: const EdgeInsets.all(4), padding: EdgeInsets.all(UiConstants.space1),
decoration: BoxDecoration( decoration: BoxDecoration(
shape: BoxShape.circle, shape: BoxShape.circle,
gradient: LinearGradient( gradient: LinearGradient(
@@ -155,7 +154,7 @@ class ProfileHeader extends StatelessWidget {
], ],
), ),
child: const Icon( child: const Icon(
LucideIcons.camera, UiIcons.camera,
size: 16, size: 16,
color: UiColors.primary, color: UiColors.primary,
), ),

View File

@@ -24,7 +24,7 @@ class ProfileMenuItem extends StatelessWidget {
onTap: onTap, onTap: onTap,
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: UiColors.bgPopup,
borderRadius: BorderRadius.circular(UiConstants.radiusBase), borderRadius: BorderRadius.circular(UiConstants.radiusBase),
border: Border.all(color: UiColors.border), border: Border.all(color: UiColors.border),
), ),

View File

@@ -26,7 +26,7 @@ class ReliabilityStatsCard extends StatelessWidget {
return Container( return Container(
padding: EdgeInsets.all(UiConstants.space4), padding: EdgeInsets.all(UiConstants.space4),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: UiColors.bgPopup,
borderRadius: BorderRadius.circular(UiConstants.radiusBase), borderRadius: BorderRadius.circular(UiConstants.radiusBase),
border: Border.all(color: UiColors.border), border: Border.all(color: UiColors.border),
boxShadow: [ boxShadow: [

View File

@@ -75,35 +75,35 @@ class StaffMainBottomBar extends StatelessWidget {
_buildNavItem( _buildNavItem(
index: 0, index: 0,
icon: UiIcons.briefcase, icon: UiIcons.briefcase,
label: t.staff_main.tabs.shifts, label: t.staff.main.tabs.shifts,
activeColor: activeColor, activeColor: activeColor,
inactiveColor: inactiveColor, inactiveColor: inactiveColor,
), ),
_buildNavItem( _buildNavItem(
index: 1, index: 1,
icon: UiIcons.dollar, icon: UiIcons.dollar,
label: t.staff_main.tabs.payments, label: t.staff.main.tabs.payments,
activeColor: activeColor, activeColor: activeColor,
inactiveColor: inactiveColor, inactiveColor: inactiveColor,
), ),
_buildNavItem( _buildNavItem(
index: 2, index: 2,
icon: UiIcons.home, icon: UiIcons.home,
label: t.staff_main.tabs.home, label: t.staff.main.tabs.home,
activeColor: activeColor, activeColor: activeColor,
inactiveColor: inactiveColor, inactiveColor: inactiveColor,
), ),
_buildNavItem( _buildNavItem(
index: 3, index: 3,
icon: UiIcons.clock, icon: UiIcons.clock,
label: t.staff_main.tabs.clock_in, label: t.staff.main.tabs.clock_in,
activeColor: activeColor, activeColor: activeColor,
inactiveColor: inactiveColor, inactiveColor: inactiveColor,
), ),
_buildNavItem( _buildNavItem(
index: 4, index: 4,
icon: UiIcons.users, icon: UiIcons.users,
label: t.staff_main.tabs.profile, label: t.staff.main.tabs.profile,
activeColor: activeColor, activeColor: activeColor,
inactiveColor: inactiveColor, inactiveColor: inactiveColor,
), ),