Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

53 Commits

Repository files navigation

GrowTogether APP

App móvil de seguimiento de hábitos con componente social: rachas, estadísticas, desafíos con amigos y recordatorios.

FlutterDartProvideri18nPlataformas


Sobre el proyecto

GrowTogether es una aplicación de seguimiento de hábitos con componente social, inspirada en Atomic Habits de James Clear: construye hábitos consistentes, visualiza tu progreso y compite con amigos en desafíos.

Es el Trabajo Final de Grado de DAM (Desarrollo de Aplicaciones Multiplataforma, 2025/2026) de Jordi Patuel Pons.

Papel de este repositorio

Este repo contiene la app móvil (Flutter) que usan los usuarios finales: hábitos con rachas, estadísticas con heatmaps, desafíos entre amigos, recordatorios locales, perfil personalizable y soporte de 3 idiomas. Consume la API REST a través del paquete compartido growtogether_data.

Ecosistema GrowTogether

RepositorioDescripción
GrowTogetherAPIBackend REST (Java 17 + Spring Boot)
GrowTogetherAPP ← estás aquíApp móvil de hábitos (Flutter)
GrowTogetherADMINPanel de administración web (Flutter Web)
GrowTogetherDATAPaquete Dart compartido: modelos, cliente HTTP y repositorios

Stack técnico

CapaTecnología
FrameworkFlutter 3.38+ (Dart 3.10+)
State managementProvider 6.x (ChangeNotifier + MultiProvider)
Capa de datosPaquete growtogether_data v0.5.0 (referenciado por git, compartido con el panel admin)
HTTPDio 5.x con interceptor JWT (vía growtogether_data)
Almacenamiento seguroflutter_secure_storage 9.x (vía growtogether_data)
Conectividadconnectivity_plus 6.x (banner sin red)
Notificaciones localesflutter_local_notifications 17.x + permission_handler 11.x
Imágenesimage_picker 1.x (cámara / galería)
Efectos visualesconfetti 0.7.x (celebración día completo)
i18nFlutter ARB (es / en / ca)

Cómo ejecutarlo en local

El código vive en el subdirectorio growtogetherapp/ del repo; ejecuta los comandos de Flutter desde ahí.

Requisitos previos

  • Flutter SDK 3.38+ con Dart 3.10+ (instalación)
  • Android Studio o VS Code con extensión Flutter
  • Dispositivo Android (API 23+) o emulador
  • GrowTogetherAPI corriendo en el puerto 8081 (ver su README)

Verifica la instalación:

flutter doctor

Instalación

# 1. Clona el repositorio
git clone https://github.com/devPatuel/GrowTogetherAPP.git
cd GrowTogetherAPP/growtogetherapp
# 2. Instala dependencias
flutter pub get
# 3. Genera los archivos de localización
flutter gen-l10n

Configuración

La URL base de la API se inyecta en compile time vía --dart-define=API_URL=.... El main.dart la lee con ApiConfig.fromEnv(fallback: 'http://localhost:8081/api/v1'), así que sin flag se usa el fallback de localhost.

EscenarioComando
Emulador Androidflutter run --dart-define=API_URL=http://10.0.2.2:8081/api/v1
Dispositivo físico (USB + adb reverse)adb reverse tcp:8081 tcp:8081 && flutter run
Dispositivo en LANflutter run --dart-define=API_URL=http://192.168.X.X:8081/api/v1
Chrome (web)flutter run -d chrome --dart-define=API_URL=http://localhost:8081/api/v1

Ejecución

# Listar dispositivos disponibles
flutter devices
# Lanzar en un dispositivo concreto
flutter run -d <device-id># Lanzar en Chrome (web)
flutter run -d chrome

Credenciales de prueba

RolEmailContraseña
Adminadmin@growtogether.comPrueba123
Usuario estándarusuario@growtogether.comPrueba123

Estructura del proyecto

lib/
├── main.dart # MultiProvider + MaterialApp + bootstrap de repos
├── core/
│ ├── feedback/ # FeedbackController + FeedbackService (vibración + animaciones)
│ ├── l10n/ # Controlador de idioma (ValueNotifier)
│ ├── theme/ # 4 temas + controlador (ValueNotifier)
│ └── utils/ # Validadores, iconos de hábitos, colores de desafíos, snack helper, dashboard cache
├── providers/ # ChangeNotifiers (Auth, Habitos, DetalleHabito, Perfil, Statistics, Amistad, Desafios, Notificaciones, Connectivity, DetalleDesafio)
├── services/ # Servicios de capa OS (LocalNotificationsService sobre flutter_local_notifications)
├── screens/ # Pantallas
│ └── widgets/ # Widgets reutilizables (HeatmapCalendar, ProgressPainters, MultilineChart, etc.)
└── l10n/ # ARB generados por flutter gen-l10n

Los modelos, el cliente HTTP (Dio + interceptor JWT), el almacenamiento seguro y los repositorios viven en el paquete growtogether_data (referenciado por git ref desde GitHub, ver pubspec.yaml). Es el mismo paquete que consume el panel admin web, así garantizamos un único contrato con la API.


Funcionalidades implementadas

  • Autenticación: registro, login, cierre de sesión, cambio de contraseña con invalidación de token
  • Hábitos: crear, editar, eliminar, marcar/desmarcar por fecha, historial interactivo
  • Hábitos PERSONALIZADO: soporte para días de la semana específicos (lunes, miércoles, viernes…)
  • Rachas: cálculo de racha actual y máxima, diferenciado para hábitos diarios y personalizados
  • Estadísticas: heatmap general + por hábito (16 semanas), récords de racha, métricas globales
  • Perfil: foto de perfil (cámara/galería), editar nombre y email, 4 temas de color, 3 idiomas
  • i18n: español, inglés y catalán con sincronización de preferencias en servidor
  • Consejo del día: el dashboard muestra el consejo asignado a la fecha de hoy desde la API (GET /usuarios/consejo/hoy). Lo gestiona el panel admin, no está hardcoded.
  • Recordatorios locales: cada hábito puede tener un recordatorio que se programa como notificación local con flutter_local_notifications. La configuración vive en el backend; al login la app reprograma todas las alarmas según el hábito asociado (diario o días específicos).
  • Tolerancia a red: banner persistente cuando se pierde la conexión y caché del dashboard (hábitos del día + consejo) en SharedPreferences. Las acciones siguen requiriendo conexión, las lecturas se sirven del caché si la API falla.

Temas disponibles

NombreDescripción
ClaroFondo blanco, acentos rosa/lavanda
OscuroFondo negro, acentos teal/cyan
MoradoGradiente púrpura-azul, acentos naranja
NaturalezaGradiente verde-dorado, acentos tierra

El tema e idioma se sincronizan con el servidor y se restauran en cada inicio de sesión.


Tests

flutter test

Cobertura actual: 42 tests entre unitarios y de widget. Cubren los 10 providers (Auth, Habitos, DetalleHabito, Perfil, Statistics, Amistad, Desafios, DetalleDesafio, Notificaciones, Connectivity), los validadores de formularios (Validators) y las pantallas de login y registro.


Generar documentación (dart doc)

dart doc .

Salida en doc/api/. Por defecto está incluida en .gitignore (quita la línea **/doc/api/ si quieres versionarla o publicarla a GitHub Pages).


Decisiones de arquitectura

Las decisiones técnicas (Flutter vs React Native, Provider vs Bloc, Navigator vs GoRouter, política offline, recordatorios locales…) están documentadas en docs/DECISIONS.md. Las del paquete de datos compartido viven en GrowTogetherDATA/docs/DECISIONS.md y las del backend en GrowTogetherAPI/docs/DECISIONS.md.


Licencia

Proyecto académico — Trabajo Final de Grado de DAM · GrowTogether · Jordi Patuel Pons.

About

App móvil Flutter de GrowTogether (TFG DAM): hábitos, rachas, desafíos con amigos, i18n es/en/ca

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages