Proyecto Flutter con soporte para AR, mapas, Firebase y visualización 3D. Este README explica dónde va cada cosa y los archivos/clases principales.
- Código fuente principal: lib/
- Configuración de dependencias: pubspec.yaml
- Build artefacts y avisos de licencias: build/ — por ejemplo build/web/assets/NOTICES
- Configuración Firebase Android: android/app/google-services.json
- PWA / Web manifest: web/manifest.json
- Punto de entrada de la app: lib/main.dart — contiene la clase principal
MyAppy la inicialización de servicios (Firebase, Haptic, Providers). - Dependencias y versión: pubspec.yaml
- lib/ — Código fuente
- lib/main.dart — Inicialización y
runApp. - lib/core/
- lib/core/config/env.dart — variables de entorno y configuración pública (ej.
baseUrl). - lib/core/config/routes.dart — rutas y configuración de navegación (GoRouter) (lib/core/config/routes.dart).
- lib/core/config/theme.dart — tema de la app (lib/core/config/theme.dart).
- lib/core/config/env.dart — variables de entorno y configuración pública (ej.
- lib/services/
- lib/services/haptic/haptic_service.dart — servicio central de vibraciones (
HapticService). - lib/services/translations/translations.dart — mapa de traducciones y localizaciones (
translations). - lib/services/firebase/ — inicialización de Firebase y FCM.
- lib/services/haptic/haptic_service.dart — servicio central de vibraciones (
- lib/data/ — repositorios y acceso a datos (ej.
data/repositories/auth_repository.dart). - lib/presentation/ — UI y widgets
- lib/presentation/screens/
- lib/presentation/screens/create_poi_screen.dart — pantalla para crear POIs (
CreatePOIScreen) - lib/presentation/screens/model3d_screen.dart — visor 3D (
ModelViewerScreen) - lib/presentation/screens/terms_screen.dart — términos y condiciones (
TermsAndConditionsScreen) - lib/presentation/screens/about_screen.dart — pantalla “About” y modelo
_Person
- lib/presentation/screens/create_poi_screen.dart — pantalla para crear POIs (
- lib/presentation/widgets/ — widgets reutilizables (ej. lib/presentation/widgets/cards/poi_card_simple.dart usa
HapticService).
- lib/presentation/screens/
- lib/main.dart — Inicialización y
- android/, ios/, linux/, macos/, windows/ — plataformas nativas y configuración específica.
- web/ — archivos para versión web (p. ej. web/manifest.json).
- build/ — artefactos generados (no versionar). Contiene avisos de licencias: build/web/assets/NOTICES.
.firebaserc— proyecto Firebase por defecto.run_flutter_clean.sh,rebuild_ios.sh— scripts útiles para limpiar/compilar.HAPTIC_FEEDBACK.md— documentación interna sobre el servicio háptico (HAPTIC_FEEDBACK.md).
- Todas las cadenas traducidas están en lib/services/translations/translations.dart en el mapa
translations. ElLocaleProviderenlib/presentation/providers/locale_provider.dartgestiona la selección de idioma.
- Firebase: inicializado en lib/main.dart (llamada a servicios en
main). Archivos específicos:- Android: android/app/google-services.json
- (iOS)
GoogleService-Info.plistdebe ir enios/Runner/
- Haptics: servicio central en lib/services/haptic/haptic_service.dart — inicializar en
mainconawait HapticService().initialize();y usarHapticService().medium()etc. - API base: la URL base está en lib/core/config/env.dart como
baseUrl.
Proyecto Flutter con soporte para AR, mapas, Firebase y visualización 3D. Este README combina un resumen rápido con una explicación detallada archivo por archivo de la carpeta lib/ (qué hace cada fichero y por qué está ahí).
- Código fuente principal:
lib/ - Configuración de dependencias:
pubspec.yaml - Artefactos de build:
build/(no versionar). Ejemplo:build/web/assets/NOTICES - Configuración Firebase Android:
android/app/google-services.json - PWA / Web manifest:
web/manifest.json
- Instala dependencias:
flutter pub get- Ejecuta la app en un dispositivo/emulador:
flutter runSi necesitas limpiar:
./run_flutter_clean.shlib/— Código fuente principal (ver detalle más abajo).android/,ios/,linux/,macos/,windows/— código y configuración nativa por plataforma.web/— recursos para la versión web (manifest, icons, index.html).build/— artefactos generados por Flutter (no commitear).
lib/main.dart- Qué hace: punto de entrada. Inicializa Flutter, Firebase (
FirebaseService.initialize()), el servicio háptico (HapticService().initialize()), y arranca la app conMultiProvider(inyectaLocaleProvider,ThemeProvider,AuthRepository,AuthProvider,RouteProvider). UsaMaterialApp.routerconAppRouter. - Por qué está aquí: centraliza inicializaciones y la inyección de dependencias.
- Qué hace: punto de entrada. Inicializa Flutter, Firebase (
-
lib/core/config/env.dart- Contiene constantes y variables globales:
baseUrldel backend, claves de Firebase Web (API key, project id), timeouts y variables mutables comonotificationsToken,idToken,email. - Uso: valores de configuración que el resto de servicios y API consumen.
- Contiene constantes y variables globales:
-
lib/core/config/routes.dart- Define
AppRouterusandogo_routery lanavigatorKeyglobal. Declara rutas públicas y privadas, recibestate.extrapara pasar parámetros entre pantallas y aplica redirección basada en el estado de autenticación (FirebaseAuth.instance.currentUser).
- Define
-
lib/core/config/theme.dart- Define
AppThemeconlightThemeydarkTheme(colores, estilos de AppBar, botones, inputs, etc.). Incluye utilidades comoThemeNotifier.
- Define
-
lib/core/errors/exceptions.dart- Define excepciones de dominio:
AppExceptiony subclases (AuthException,NetworkException,ServerException,CacheException,ValidationException).
- Define excepciones de dominio:
-
lib/core/utils/crypto.dartgetEmailSha256(email): utilidad para obtener SHA-256 de un email (utilizada para generaridTokenderivado).
-
lib/core/utils/location_helper.dartdeterminePosition(): envoltorio degeolocatorpara solicitar permisos y devolver la posición actual o lanzar excepciones legibles.
-
lib/services/firebase/firebase_service.dart- Inicializa Firebase en web y nativo. Proporciona
FirebaseService.initialize()y getters para la instancia.
- Inicializa Firebase en web y nativo. Proporciona
-
lib/services/firebase/fcm_service.dart- Singleton para Firebase Cloud Messaging (permiso de notificaciones, obtención/refresh del token, listeners
onMessageyonMessageOpenedApp). Muestra diálogos desde elnavigatorKeyy guardanotificationsTokenenenv.dart.
- Singleton para Firebase Cloud Messaging (permiso de notificaciones, obtención/refresh del token, listeners
-
lib/services/firebase/auth_service.dart- Lógica detallada de autenticación: login/registro con email, Google Sign-In, manejo de ID tokens, envío de email de recuperación, sign out, delete account y conversión de errores Firebase a
AuthException.
- Lógica detallada de autenticación: login/registro con email, Google Sign-In, manejo de ID tokens, envío de email de recuperación, sign out, delete account y conversión de errores Firebase a
-
lib/services/api/api_service.dart- Conjunto de funciones que llaman al backend REST (
baseUrl) con reintentos y timeouts (makeRequestWithRetry). Funciones principales:getDaysInformation,getCardInformation,fetchRouteCoordinates,fetchInterestPoints,getLanguages,getRouteTypes,fetchImage,moreInfoPois,getPoisTypes,getAllRoutesByRouteType,registerUser,updateUserCoords,send_notification_sos,create_poi,get_pois_by_user_email, etc. - Uso: centralizar llamadas HTTP y lógica de reintentos.
- Conjunto de funciones que llaman al backend REST (
-
lib/services/haptic/haptic_service.dart- Servicio único que encapsula
HapticFeedbackyvibration. Métodos:initialize(),light(),medium(),heavy(),success(),error(),warning(),notification(),custom(),cancel().
- Servicio único que encapsula
-
lib/services/translations/translations.dart- Mapa
translationscon claves de idioma (UUID-like) y pareskey -> textopara múltiples idiomas (es, en, fr, de, it, pt, ca, gl, ...). Utilizado porLocaleProvider.
- Mapa
-
lib/data/repositories/auth_repository.dart- Abstracción sobre
FirebaseAuthy proveedores externos (Google, Apple). Métodos:signInWithEmailAndPassword,signUpWithEmailAndPassword,sendPasswordResetEmail,signInWithGoogle,signInWithApple,signOut.
- Abstracción sobre
-
lib/data/repositories/location_repository.dart- Abstracción sobre
Geolocatorpara obtener la ubicación del dispositivo y manejar permisos.
- Abstracción sobre
-
lib/presentation/providers/auth_provider.dartAuthProvider(ChangeNotifier) que medía entre la UI yAuthRepository. Realiza flujos comunes post-login (actualizaenv.idTokencon SHA-256 del email y registra usuario contra el backend conapi.registerUser()). Devuelve mensajes legibles para la UI.
-
lib/presentation/providers/locale_provider.dartLocaleProvider(ChangeNotifier) que guarda la preferencia de idioma enSharedPreferences, exponetranslate(key, args)usandotranslations.
-
lib/presentation/providers/theme_provider.dartThemeProvider(ChangeNotifier) que guarda la preferencia de tema (light/dark) enSharedPreferences.
-
lib/presentation/providers/route_provider.dartRouteProvider(ChangeNotifier) que carga tipos de ruta desde la API (api.getRouteTypes()), manteniendo_isLoading,_errory_routeTypes.
home_drawer.dart— Drawer lateral con navegación y opciones de la app.route_list_view.dart— Lista de tarjetas de rutas (usada enHomeScreen).cards/poi_card.dart,cards/poi_card_simple.dart— componentes para mostrar POIs (tarjetas con flip, preview y acciones).PoiCardSimplese usa enMyPoisScreen.map/*— componentes relacionados con mapas: marcadores (current location, route endpoints, interest points), botones flotantes, mapas personalizados.languages_dropdown.dart— dropdown para cambiar idioma.sponsors_logos.dart— logos de patrocinadores (usado enLoginScreen).
-
home_screen.dart- Pantalla principal con
TabBarque muestra tipos de rutas (usaRouteProvider). Cada pestaña hace consultas a la API y muestraRouteListView. Actualiza las coordenadas del usuario y permite abrir mapas por tipo de ruta.
- Pantalla principal con
-
login_screen.dart- Pantalla de autenticación usando
flutter_login. Integra login/registro por email, Google y Apple. UsaAuthProvider.
- Pantalla de autenticación usando
-
settings_screen.dart(inferido)- Ajustes de usuario: tema, idioma, notificaciones, etc.
-
all_routes_map_screen.dart(inferido)- Mapa con todas las rutas para un tipo dado (usa
getAllRoutesByRouteType).
- Mapa con todas las rutas para un tipo dado (usa
-
about_screen.dart- Información del proyecto, créditos y enlaces.
-
route_stages_screen.dart(inferido)- Detalle de las etapas/días de una ruta (
getDaysInformation).
- Detalle de las etapas/días de una ruta (
-
my_pois_screen.dart- Lista de POIs del usuario (
get_pois_by_user_email), muestra tarjetas y modales con más información.
- Lista de POIs del usuario (
-
ar_screen.dart- Pantalla AR basada en
ar_flutter_plugin_2. Gestiona anchors y nodes, permite colocar modelos.glben el mundo real.
- Pantalla AR basada en
-
model3d_screen.dart- Visor 3D con
model_viewer_pluspara mostrar.glbremotos.
- Visor 3D con
-
create_poi_screen.dart- Formulario para crear POIs: picker de imagen (
image_picker), obtención de coordenadas (determinePosition()), y envío acreate_poidel backend.
- Formulario para crear POIs: picker de imagen (
-
terms_screen.dart,delete_account_screen.dart,one_route_map_screen.dart- Pantallas de soporte (términos, eliminar cuenta, vista de una ruta en el mapa).
main.dartconfigura providers y servicios.AuthRepositoryes inyectado y usado porAuthProvider.AppRoutercontrola la navegación y protege rutas privadas con Firebase Auth.api_service.dartrealiza llamadas REST que consumen las pantallas y los providers.FirebaseService,FCMService,AuthServiceencapsulan integraciones con Firebase (inicialización, notificaciones, auth).LocaleProviderytranslationsproporcionan i18n;HapticServicecentraliza el feedback háptico.
- Autenticación: las redirecciones del router dependen de
FirebaseAuth.instance.currentUser— pueden existir condiciones de carrera si el estado del usuario no está listo enseguida. La app inicializa Firebase enmain, lo que reduce este riesgo. - Localización: si
determinePosition()arroja errores por permisos denegados, las pantallas deben manejarlo (ya hay manejo de errores enHomeScreenyCreatePOIScreen). - Peticiones HTTP:
api_serviceimplementa reintentos y timeouts; aun así la UI muestra estados de error y loaders. - Seguridad:
lib/core/config/env.dartcontiene claves de Firebase para web y variables públicas. No introducir secretos privados en el repo.