Flutter est un framework de développement d'applications mobiles, web et desktop développé par Google. Il permet de créer des applications performantes et esthétiques à partir d'une seule base de code. On peut ainsi cibler la plupart des plateformes (IOS, Android, Web, Windows, MacOS, Linux).
J'aime beaucoup Flutter car il facilite le développement multiplateforme à partir d'une seule base de code, ce qui est particulièrement efficace pour les petites équipes ou les projets solo. Flutter propose un système de design flexible, de haute qualité et simple à mettre en oeuvre. De plus, Flutter est open source, donc la communauté contribue à son évolution, ce qui en fait un choix robuste pour développer des applications de qualité.
Un autre avantage de Flutter est la gestion native du responsive via son système de widgets, qui s'adaptent à la taille de l'écran. Ce modèle facilite la création d'interfaces robustes et personnalisables tout en simplifiant la maintenance, comparé à une approche HTML/CSS classique pour des projets multiplateformes.
Comme le montre cet article (février 2026), IOS représente environ 28 % du marché mondial et Android 72 %. Développer pour une seule plateforme revient donc à se priver d'une large part du marché. Avec Flutter, on peut cibler les deux plateformes simultanément, un avantage notable pour toucher un public plus large sans augmenter la charge de travail.
J'ai réalisé quatre projets en Flutter (trois personnels et un professionnel), ce qui m'a permis d'acquérir une solide expérience. Je me concentre ici sur les deux projets les plus significatifs, Genesis et Econoris. Pour découvrir d'autres projets, consultez les dépôts GitHub de mes applications personnelles : FlorAccess et Flollylist.
Genesis et Econoris partagent la même architecture et ont été développés en parallèle, ce qui m'a permis d'itérer entre les projets et d'appliquer les bonnes pratiques d'un projet à l'autre. Cette démarche m'a aidé à maîtriser Flutter et à comprendre les meilleures pratiques pour créer des applications performantes, maintenables et sécurisées.
Pour Genesis, nous avons choisi Flutter pour plusieurs raisons : certaines applications du groupe Ocea Smart Building étaient déjà développées avec Flutter, assurant une homogénéité, et Flutter permet de cibler plusieurs plateformes depuis une seule base de code. Nous étions une équipe de cinq développeurs, dont deux sur Genesis, sans ressources pour maintenir plusieurs codes sources. Le besoin d'une application IOS, Android et Web a confirmé ce choix. Flutter s'est avéré performant, facile à maintenir et très apprécié des utilisateurs.
La première version de l'application avait été générée en grande partie à l'aide d'outils d'intelligence artificielle, pour accélérer le développement, car ni mon collègue ni moi n'étions expérimentés avec Flutter. Cette version, bien que fonctionnelle, manquait de performance et de maintenabilité et contenait de nombreux bugs. J'ai donc mené des recherches approfondies sur les bonnes pratiques et architectures Flutter. En une semaine intense, j'ai produit une mini-documentation décrivant une architecture frontend optimisée, combinant les bonnes pratiques Flutter avec Riverpod et GoRouter, bibliothèques utilisées dans Genesis.
Cette nouvelle architecture nous a contraints à réécrire presque entièrement l'application, mais elle a permis de corriger tous les bugs et d'améliorer sensiblement les performances. Le temps de chargement maximal est passé d'environ 25 secondes à environ 10 secondes.
Cette amélioration restait insuffisante, j'ai donc poursuivi les recherches et proposé d'externaliser les calculs. Au lieu que chaque page exécute des calculs sur le jeu de données, l'application effectue ces calculs une seule fois, de manière asynchrone, lors de la réception des données du backend, puis afficher les résultats progressivement. Cette approche réduit la perception du temps de chargement et évite les recalculs lors de la navigation entre les pages. Après cette troisième refonte, le temps de chargement maximal est passé d'environ 10 secondes à moins d'une seconde.
Ces trois refontes ont permis à la fois d'optimiser les performances et d'améliorer la maintenabilité. L'architecture est désormais organisée par features, l'application est plus légère et consomme moins de ressources et de batterie, ce qui est essentiel pour des techniciens qui l'utilisent plusieurs heures par jour sans pouvoir recharger leur téléphone.
Pour Econoris, j'ai suivi le même processus : une première version générée rapidement (IA), puis l'application des bonnes pratiques et de l'architecture développées pour Genesis. Cela a permis d'améliorer les performances, de corriger les bugs et d'accroître la maintenabilité.
Je n'ai pas encore eu le temps de déployer la troisième refonte sur Econoris, mais c'est prévu, parce que l'expérience sur Genesis montre que cette approche améliore considérablement les performances.
Econoris a aussi servi de terrain d'expérimentation pour Genesis. Les enseignements tirés ont été appliqués d'un projet à l'autre, notamment l'utilisation de Riverpod pour la gestion d'état et le rafraîchissement automatique de l'interface. Le hasard du calendrier a permis de mener ces deux projets en parallèle (Genesis au travail, Econoris en temps personnel).
Econoris est plus simple et plus petit que Genesis, ce qui a permis d'expérimenter des idées dans un contexte concret. Compte tenu de la complexité de l'architecture, il aurait été difficile, voir impossible, de l'appliquer directement sur Genesis sans l'expérience acquise sur Econoris.
Econoris inclut des fonctionnalités que je n'ai pas encore implémentées sur Genesis, comme le support du thème sombre/clair choisi par l'utilisateur. Cette fonctionnalité est simple à mettre en place avec Flutter et apporte une réelle valeur, notamment pour une application utilisée pendant de longues sessions.
À l'inverse, Genesis propose des fonctionnalités plus avancées, comme un écran "What's new" affiché après les mises à jour pour informer les utilisateurs. Genesis dispose également d'une version Android publiée sur le Play Store privé de l'entreprise, tandis qu'Econoris n'offre pour l'instant qu'une version web, qui a servi de base pour la version web de Genesis et a permis d'économiser environ deux jours de développement.
Aujourd'hui, je suis satisfait de l'architecture mise en place pour Genesis et Econoris. Elle est solide, performante, maintenable et respecte les bonnes pratiques Flutter. Je vais réutiliser cette architecture pour mes futurs projets, personnels ou professionnels.
J'ai notamment prévu de FlorAccess et Flollylist avec cette architecture, et de rédiger une documentation technique complète pour la partager sur Ma Documentation. Cette architecture peut bénéficier à des développeurs Flutter de tous niveaux.
Ces expériences m'ont permis de développer une bonne maîtrise de Flutter. Je sais créer des applications performantes, maintenables et sécurisées. Je suis toutefois conscient qu'il reste beaucoup à apprendre, notamment avec l'évolution régulière du framework et des bonnes pratiques. Je suis motivé pour continuer à progresser pour toujours founir les meilleures solutions.
Je sais qu'aucune architecture n'est parfaite, mais l'objectif est d'avoir une architecture suffisamment bien conçue pour s'adapter à la plupart des projets Flutter, facilement évolutive et conforme aux bonnes pratiques, afin d'être maintenable par d'autres développeurs, quel que soit leur niveau.
Le but d'une architecture est de faciliter le travail des développeurs, la simplicité favorise l'évolutivité. Je privilégie une architecture claire et efficace plutôt qu'une structure complexe difficile à comprendre.
Je compte continuer à développer mes compétences Flutter en réalisant des projets personnels et professionnels, afin d'approfondir mon expérience et d'explorer de nouvelles possibilités offertes par le framework comme les notifications push que je n'ai pas encore eu le temps de mettre en place.
Ma maîtrise de Flutter est un réel atout pour mon projet professionnel. Je souhaite créer une entreprise de développement et vivre de la création d'applications. Ma documentation Flutter me sert d'aide-mémoire et me permettra de transmettre ces connaissances à de futurs collaborateurs.