Points clés à retenir
- Flutter n'est pas magique : le vrai boulot, c'est la structure de projet et la gestion d'état, pas l'installation.
- L'erreur la plus courante des débutants : se lancer dans le code sans comprendre le cycle de vie d'un widget.
- Dart n'est pas optionnel : si tu sautes l'apprentissage du langage, tu vas souffrir.
- Les inconvénients sont réels : taille des applis, courbe d'apprentissage de l'écosystème, et compatibilité des packages.
- Déploiement = galère : compiler pour iOS nécessite un Mac, point barre.
- Commence par un projet réel : pas un tuto « todo list », mais une app qui résout un vrai problème.
Pourquoi Flutter n'est pas un framework comme les autres
Franchement, quand j'ai commencé à coder des apps mobiles il y a 4 ans, j'ai testé React Native, Xamarin, et même du natif pur sur Android. Et là, je découvre Flutter. Et je me dis : « encore un framework qui promet la lune ». Sauf que non.
Flutter, c'est le framework open source de Google qui compile du code Dart directement en code natif. Pas de pont JavaScript. Pas de traduction hasardeuse entre les couches. Résultat : les performances sont quasi identiques à une app native, avec une seule base de code pour iOS et Android. Et depuis 2022, ça marche aussi pour le web et le desktop. Mais bon, on va se concentrer sur le mobile pour l'instant.
Ce que j'ai appris en 3 ans de Flutter, c'est que le framework est génial… mais la difficulté n'est pas là où on l'attend. Installez Flutter, lancez une app, et vous aurez un compteur qui s'incrémente en 5 minutes. Le vrai problème ? La structure de projet, la gestion d'état, et le déploiement. Voilà ce que personne ne vous dit dans les premiers tutoriels.
Installer Flutter : le bon plan
Sur Mac : le parcours classique
J'ai fait l'erreur de vouloir utiliser la version brew. Ne faites pas ça. Téléchargez le SDK directement depuis le site officiel. Voici la procédure exacte que j'utilise encore :
- Téléchargez le paquet d'installation pour obtenir la dernière version stable du SDK Flutter (Intel ou Apple Silicon, selon votre processeur).
- Décompressez le fichier à l'emplacement souhaité, par exemple :
$ cd ~/developmentpuis$ unzip ~/Downloads/flutter_macos_3.3.0-stable.zip - Ajoutez Flutter à votre path :
$ export PATH="$PATH:`pwd`/flutter/bin" - Lancez
flutter doctorpour vérifier l'installation.
Ça a l'air simple ? Eh bien, ça l'est. Mais ce que j'ai mis 2 jours à comprendre, c'est que flutter doctor est votre meilleur ami. Il détecte les problèmes de configuration : SDK Android manquant, version de Xcode obsolète, émulateur pas lancé. Ne passez pas à l'étape suivante tant que tout n'est pas vert.
Sur Windows : le même processus, mais…
Le processus est identique, mais j'ai rencontré un problème spécifique : le path Windows. Si vous installez Flutter dans un dossier avec des espaces (comme « Program Files »), vous allez avoir des erreurs incompréhensibles. Mettez-le dans C:\dev\flutter et tout roule.
Créer votre premier projet Flutter
En ligne de commande : la méthode la plus rapide
Ouvrez un terminal, et tapez :
flutter create mon_app
cd mon_app
flutter run Et là, surprise : vous avez une app qui tourne sur votre émulateur. C'est ce qu'on appelle le « Hello World » de Flutter. Mais ce n'est pas ça qui vous apprendra à coder.
Avec VS Code : une interface plus confortable
J'utilise VS Code au quotidien. Installez l'extension Flutter officielle, et faites View > Command Palette > Flutter: New Project. Choisissez « Application », nommez-le, et vous obtenez la même structure que la ligne de commande. Le gros avantage : le débogage intégré avec les DevTools.
Les bases de Dart à ne pas négliger
J'ai vu des développeurs qui connaissaient Java ou JavaScript se lancer directement dans Flutter sans apprendre Dart. Résultat : ils écrivaient du code qui ressemblait à du JavaScript, avec des bugs de typage partout. Dart est un langage typé, et il a ses propres règles.
Les concepts à maîtriser absolument :
- const vs final : faites l'effort d'utiliser
constquand vous le pouvez, ça optimise les performances. Mais ne mettez pasconstpartout non plus, sous peine d'erreurs bizarres. - Null safety : Dart 2.12 l'a introduit. Si vous venez de JavaScript, vous allez galérer avec les
?et!. Mais une fois que vous avez compris queString?signifie « peut être null », c'est un jeu d'enfant. - Les futures et async/await : pour les requêtes HTTP, la lecture de fichiers, tout ça.
Mon conseil : passez une journée à faire les exercices sur dart.dev avant de toucher à Flutter. Ça vous fera gagner des semaines.
Comprendre les widgets : la base de Flutter
Tout est widget. C'est la phrase que vous allez entendre 100 fois. Un widget, c'est un composant visuel : un bouton, un texte, une colonne, une image. La magie de Flutter, c'est que même la disposition (Row, Column, Stack) est un widget.
J'ai mis des mois à comprendre la différence entre un StatefulWidget et un StatelessWidget. En gros :
- StatelessWidget : immuable, parfait pour un texte ou une image qui ne changent pas.
- StatefulWidget : mutable, pour un compteur ou un formulaire.
Mais attention : ne transformez pas tout en StatefulWidget. J'ai vu des projets avec un seul widget monstrueux de 1000 lignes. Séparez vos widgets en petits composants réutilisables. C'est la clé d'un code propre.
La gestion d'état : le grand défi de Flutter
Pourquoi ne pas utiliser setState partout ?
Au début, j'utilisais setState() pour tout. Et plus l'app grandissait, plus c'était un enfer. Le code devenait illisible, et les performances s'effondraient. Le problème : quand vous appelez setState(), tout le widget est reconstruit. Pas seulement la partie qui a changé.
Et là, j'ai découvert les packages de gestion d'état. Il y en a des dizaines : Provider, Bloc, Riverpod, GetX, Redux… J'ai testé les 4 premiers. Mon avis :
| Package | Facilité d'apprentissage | Performances | Écosystème | Mon avis |
|---|---|---|---|---|
| Provider | Élevée | Bonnes | Large | Parfait pour commencer |
| Bloc | Faible | Excellent | Moyen | Pour des apps complexes |
| Riverpod | Moyenne | Très bonnes | Moyen | Moderne, je l'utilise |
| GetX | Très élevée | Moyennes | Élevée | À éviter pour des gros projets |
Pour un débutant, je recommande Provider. C'est simple, documenté, et ça vous apprend les bases de l'injection de dépendances.
Les inconvénients de Flutter : la vérité
Quels sont les inconvénients de Flutter ?
On ne va pas se mentir, Flutter n'est pas parfait. D'après mon expérience, voici les vrais problèmes :
- Taille de l'application : une app Flutter fait au moins 5-6 Mo. C'est plus lourd que du natif. Mais honnêtement, pour la plupart des apps, c'est négligeable.
- Courbe d'apprentissage de l'écosystème : le framework lui-même est simple, mais les packages (gestion d'état, navigation, requêtes HTTP) sont nombreux et parfois incompatibles entre eux. J'ai passé des heures à debugger des conflits de versions.
- Compatibilité des packages : certains packages ne sont pas mis à jour régulièrement, et il faut souvent chercher une alternative. Par exemple, pour la géolocalisation, j'ai dû changer 3 fois de package en 2 ans.
- Déploiement iOS : il faut un Mac. Point. Pas de contournement. Si vous n'avez que Windows, oubliez l'App Store.
Mais voilà, malgré ces défauts, je reste sur Flutter. Pourquoi ? Parce que la productivité est incomparable. En 2 jours, je peux sortir une app fonctionnelle sur les deux stores. Essayez de faire ça en natif.
Déploiement, test et erreurs courantes
Comment debugger une app Flutter ?
Utilisez les DevTools intégrés à VS Code. Ouvrez la palette de commandes, cherchez « Flutter: Open DevTools », et vous aurez un inspecteur visuel, un timeline des performances, et un analyseur de mémoire. C'est un outil incroyable.
Les erreurs courantes que j'ai faites :
- Oublier le null safety : j'ai eu des erreurs de runtime parce que j'utilisais
Stringau lieu deString?. - Confondre les versions : Flutter 3.0 utilise Dart 3.0, mais certains packages ne sont pas compatibles. Toujours vérifier la compatibilité dans le
pubspec.yaml. - L'émulateur lent : utilisez un vrai appareil pour les tests. L'émulateur Android est très lent sur les premières générations de processeurs Apple.
Comment compiler pour la production ?
Pour Android, tapez flutter build apk (pour un APK) ou flutter build appbundle (pour le Play Store). Pour iOS, il faut un Mac et taper flutter build ios. Mais avant ça, n'oubliez pas de signer votre app. C'est un processus un peu chiant, mais Google fournit une documentation claire.
Et une fois que vous avez compilé, testez sur un vrai téléphone. Parfois, l'app fonctionne sur l'émulateur mais pas en production à cause de permissions ou de ressources manquantes.
Comment apprendre Flutter sans se perdre
Comment puis-je apprendre à développer une application mobile ?
Voici le plan que j'aurais aimé avoir quand j'ai commencé :
- Suivez le codelab officiel de Google : « Your first Flutter app » sur Google Codelabs. En 2 heures, vous construisez une app qui génère des noms sympas. C'est bien fait, avec une vidéo en prime.
- Apprenez Dart : faites les exercices sur dart.dev. Ne sautez pas cette étape.
- Créez un petit projet personnel : une app météo, une liste de courses, un compteur de calories. Le but est de faire des erreurs. C'est en corrigeant vos bugs que vous apprenez.
- Lisez la documentation : flutter.dev est très bien faite. Et utilisez pub.dev pour trouver des packages fiables.
- Rejoignez la communauté : Discord Flutter, le subreddit r/FlutterDev, et Stack Overflow. Mais posez des questions précises, pas « ça marche pas ».
J'ai mis 3 mois à comprendre la gestion d'état. Mais une fois que ça a cliqué, j'ai pu créer des apps complexes en une semaine. La persévérance paie.
La structure de projet qui sauve
Quand j'ai commencé, je mettais tout dans le dossier lib. Résultat : un foutoir monstre. Voici la structure que j'utilise maintenant :
lib/
main.dart
app.dart
models/
services/
widgets/
pages/
providers/ (ou blocs/) Pourquoi cette structure ?
- models/ : les classes qui représentent vos données (utilisateur, produit, etc.)
- services/ : les appels API, la base de données, etc.
- widgets/ : les composants réutilisables
- pages/ : les écrans complets
- providers/ : la logique de gestion d'état
Ça a l'air simple, mais croyez-moi, ça vous évite de vous arracher les cheveux quand votre projet dépasse 10 fichiers.
Gestion des dépendances : le pubspec.yaml
Le fichier pubspec.yaml est votre tableau de bord. C'est là que vous ajoutez les packages. Par exemple, pour faire une requête HTTP :
dependencies:
flutter:
sdk: flutter
http: ^1.1.0 Ne mettez pas http: latest. Utilisez une version spécifique (^1.1.0 signifie « compatible avec 1.1.0 et supérieur »). Et avant d'ajouter un package, vérifiez sur pub.dev :
- Le nombre de téléchargements
- La date de dernière mise à jour
- Les issues ouvertes
J'ai perdu 2 jours avec un package qui n'était pas compatible avec Flutter 3.5. Faites attention aux versions.
Exemple concret : une app avec API réelle
Je vais vous donner un exemple concret. J'ai créé une app qui affiche les dernières actualités de l'écosystème Flutter. J'ai utilisé l'API de Hacker News (gratuite et simple). Voici les étapes :
- Créer un service qui appelle l'API avec le package
http. - Créer un modèle
Articleavec les champsid,title,url. - Créer un provider (avec Riverpod) qui gère l'état de chargement et les données.
- Créer un widget qui affiche une liste d'articles avec un
ListView.builder. - Gérer les erreurs : si l'API ne répond pas, afficher un message d'erreur.
Résultat : app fonctionnelle en 3 heures. Et ça m'a appris plus que 10 tutoriels.
Et le plus important : testez sur un vrai appareil. L'émulateur, c'est bien, mais rien ne remplace le ressenti d'une app qui tourne sur un téléphone.
Franchement, Flutter est un framework génial. Mais ne vous attendez pas à ce que la magie opère toute seule. Le vrai boulot, c'est la structure, la gestion d'état, et les tests. Si vous faites ça bien, vous pouvez créer des apps qui rivalisent avec du natif. Et ça, c'est plutôt cool.