Initial commit
This commit is contained in:
74
docs/adr/014-frontend-mobile.md
Normal file
74
docs/adr/014-frontend-mobile.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# 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
|
||||
|
||||
```yaml
|
||||
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
|
||||
Reference in New Issue
Block a user