ADR-009 - Flutter pour l’application mobile
- Statut : Accepté
- Date : 2026-04-05
Contexte
L’application mobile est utilisée par les agriculteurs et les pilotes de drone en plein champ, souvent dans des zones à faible connectivité. Les besoins incluent : consultation de parcelles, suivi de missions, affichage de cartes, mode offline, et accès caméra pour la prise de photos. Le choix mobile est un point de divergence majeur avec d’autres projets de l’équipe qui utilisent une PWA.
Décision
Nous choisissons de développer l’application mobile en Flutter (Dart), ciblant iOS et Android à partir d’une base de code unique.
Alternatives considérées
- Progressive Web App (PWA) : une seule base de code web+mobile, mais accès limité aux APIs natives (GPS précis, caméra avancée, stockage local robuste), performances inférieures sur mobile, et fonctionnement offline moins fiable en conditions terrain
- React Native : partage de code possible avec le frontend web (React), mais performances et accès natif inférieurs à Flutter, et gestion du mode offline plus complexe
- Application native iOS/Android séparée : performances et intégration native maximales, mais double base de code, double maintenance, double coût de développement
- Capacitor (Ionic) : proche du PWA avec accès natif, mais performances UI insuffisantes pour des cartes et interactions terrain
Conséquences
- Performances proches du natif grâce au moteur de rendu Skia/Impeller de Flutter
- Accès natif à la caméra, au GPS, au stockage sécurisé et à la connectivité réseau
- Mode offline robuste via Drift (SQLite embarqué) — voir ADR-010
- Un seul codebase pour iOS et Android
- Langage Dart distinct du reste du stack TypeScript : la base de code mobile est totalement séparée
- Les développeurs web du projet ne peuvent pas contribuer directement à la partie mobile sans apprendre Dart/Flutter
- Taille de l’APK/IPA plus importante qu’une app native pure
- Déploiement via les stores (App Store, Google Play) : processus de validation et de mise à jour plus lent qu’une PWA