Files
roadwave/docs/adr/014-frontend-mobile.md
2026-01-31 11:45:11 +01:00

2.8 KiB

ADR-014 : Frontend Mobile

Statut : Accepté Date : 2025-01-20

Contexte

RoadWave nécessite applications iOS et Android avec support CarPlay/Android Auto, lecture audio HLS avancée, géolocalisation temps réel. Le choix du framework impacte vélocité développement et performances.

Décision

Flutter pour iOS et Android avec codebase unique.

Alternatives considérées

Framework Codebase Performance Audio/CarPlay Communauté
Flutter Unique Native Excellente Large
React Native Unique Bonne Modules natifs requis Très large
Native (Swift+Kotlin) Double Excellente Native Large
Ionic/Capacitor Unique Moyenne Limitée Moyenne

Justification

  • Codebase unique : iOS + Android maintenus ensemble, vélocité développement x2
  • Performance : Dart compilé en code natif (pas de bridge JS)
  • Audio HLS : Package just_audio mature avec support HLS, buffering adaptatif
  • CarPlay/Android Auto : Support via packages communautaires (flutter_carplay, android_auto_flutter)
  • Géolocalisation : geolocator robuste avec gestion permissions
  • Écosystème : Widgets riches (Material/Cupertino), state management mature (Bloc, Riverpod)

Packages clés

dependencies:
  flutter_bloc: ^8.1.3        # State management
  just_audio: ^0.9.36         # Lecture audio HLS
  geolocator: ^11.0.0         # GPS temps réel (mode voiture)
  geofence_service: ^5.2.0    # Geofencing arrière-plan (mode piéton)
  flutter_local_notifications: ^17.0.0  # Notifications géolocalisées
  dio: ^5.4.0                 # HTTP client
  flutter_secure_storage: ^9.0.0  # Tokens JWT
  cached_network_image: ^3.3.1    # Cache images

Nouveaux packages (contenus géolocalisés) :

  • geofence_service : Détection entrée/sortie rayon 200m en arrière-plan (mode piéton)

    • Geofencing natif iOS/Android
    • Minimise consommation batterie
    • Supporte notifications push même app fermée
  • flutter_local_notifications : Notifications locales avec compteur dynamique

    • Notification avec compteur décroissant (7→1) en mode voiture
    • Icônes personnalisées selon type contenu
    • Désactivation overlay en mode CarPlay/Android Auto (conformité)

Structure application

lib/
├── core/           # Config, DI, routes
├── data/           # Repositories, API clients
├── domain/         # Models, business logic
├── presentation/   # UI (screens, widgets, blocs)
└── main.dart

Conséquences

  • Équipe doit apprendre Dart (syntaxe proche Java/TypeScript)
  • Taille binaire : 8-15 MB (acceptable)
  • Tests : flutter_test pour widgets, integration_test pour E2E
  • CI/CD : Fastlane pour déploiement stores