CHAPITRE 1.3

Première application

Créez votre première application Flutter
Il est temps de créer votre première application Flutter ! Cette section vous guidera pas à pas dans l'installation de Flutter sur Windows avec Android Studio, la création de votre premier projet, et la compréhension des concepts fondamentaux comme `runApp` et `MaterialApp`. Vous apprendrez également à exécuter votre application sur un émulateur ou un appareil mobile réel.

1.3Première application

1.3.1 – Installation & outils (Windows + Android Studio)

Maintenant que vous connaissez Flutter et ses atouts, il est temps de passer à la pratique. Dans cette section, nous allons voir comment installer Flutter sur Windows et configurer Android Studio pour développer vos applications Android avec Flutter.

💻 Prérequis système pour Windows

Avant de commencer, assurez-vous que votre ordinateur Windows répond aux exigences minimales.

Configuration requise

  • Système d'exploitation : Windows 10 version 1803 ou supérieure (64 bits)
  • Processeur : Intel Core i5 ou équivalent (i7/i9 recommandé)
  • RAM : Minimum 8 Go (16 Go recommandés)
  • Espace disque : Au moins 10 Go d'espace libre
    • Flutter SDK : ~2,5 Go
    • Android Studio : ~3 Go
    • Android SDK et outils : ~4 Go
    • Espace de travail : ~500 Mo minimum
  • Outils requis : PowerShell 5.0 ou plus récent, Git pour Windows
  • Virtualisation : Intel VT-x ou AMD-V activée dans le BIOS (pour l'émulateur Android)
Ce guide se concentre sur le développement Android sous Windows. Pour développer des applications iOS, vous devez obligatoirement utiliser un Mac avec Xcode. Cependant, vous pourrez toujours développer la logique de votre application Flutter sur Windows et la tester sur Android.

📥 Étape 1 : Installation de Git pour Windows

Flutter nécessite Git pour fonctionner. Si vous ne l'avez pas déjà installé, commencez par là.

  1. Téléchargez Git depuis git-scm.com/download/win
  2. Exécutez l'installateur
  3. Gardez les options par défaut (recommandé)
  4. Terminez l'installation

Vérifiez que Git est installé en ouvrant PowerShell et en tapant :

# Vérifier la version de Git
git --version

📥 Étape 2 : Installation du SDK Flutter

Remarque : Si vous avez déjà installé Dart avec Flutter lors de la section 1.2.4, il n'est pas nécessaire de réinstaller le SDK Flutter. Aucune installation supplémentaire n'est requise dans ce cas, passez directement à l'étape 3.

Maintenant, installons Flutter sur votre ordinateur Windows.

  1. Télécharger Flutter
  2. Extraire le fichier
    • Créez un dossier pour Flutter, par exemple : C:\dev\flutter
    • Extrayez le contenu du fichier ZIP dans ce dossier
    • Important : N'installez pas dans C:\Program Files\ (peut causer des problèmes de permissions)
  3. Ajouter Flutter au PATH
    • Ouvrez le menu Démarrer et recherchez "Variables d'environnement"
    • Cliquez sur "Modifier les variables d'environnement système"
    • Cliquez sur "Variables d'environnement"
    • Dans "Variables utilisateur", sélectionnez "Path" et cliquez sur "Modifier"
    • Cliquez sur "Nouveau" et ajoutez : C:\dev\flutter\bin
    • Cliquez sur "OK" pour tout fermer
Pour que les modifications du PATH prennent effet, fermez et rouvrez PowerShell ou votre invite de commandes. Si vous avez des fenêtres ouvertes, elles ne verront pas les changements.

✅ Étape 3 : Vérification de l'installation Flutter

Ouvrez PowerShell et vérifiez que Flutter est correctement installé :

# Vérifier que Flutter est installé
flutter --version

# Diagnostic complet de votre installation
flutter doctor

La commande flutter doctor va analyser votre système et afficher un rapport. Pour l'instant, il est normal d'avoir des croix rouges [✗] pour Android Studio et les outils Android. Nous allons les installer dans les étapes suivantes.

Si vous voyez l'erreur "flutter n'est pas reconnu", le PATH n'est pas correctement configuré. Vérifiez que vous avez bien ajouté C:\dev\flutter\bin au PATH et redémarrez PowerShell.
Capture d'écran de la sortie de flutter doctor
Capture d'écran de la sortie de flutter doctor

Une fenêtre de terminal montrant la sortie de la commande flutter doctor avec :
• Des coches vertes [✓] pour les éléments correctement installés
• Des croix rouges [✗] pour les éléments manquants
• Des points d'exclamation [!] pour les avertissements
• Des instructions détaillées pour corriger chaque problème

🛠️ Étape 4 : Installation d'Android Studio

Android Studio est l'IDE officiel pour le développement Android. C'est l'environnement de développement recommandé pour Flutter et le développement Android moderne. Elle inclut tous les outils nécessaires : éditeur de code, émulateurs Android, débogueur, et bien plus.

Téléchargement et installation

  1. Télécharger Android Studio
    • Rendez-vous sur developer.android.com/studio
    • Téléchargez la version Windows (environ 1,1 Go)
    • Vérifiez que vous téléchargez bien la dernière version stable d'Android Studio
  2. Lancer l'installateur
    • Double-cliquez sur le fichier téléchargé
    • Suivez l'assistant d'installation
    • Gardez les options par défaut (recommandé)
    • L'installation prend environ 5-10 minutes
  3. Premier démarrage d'Android Studio
    • Lancez Android Studio après l'installation
    • L'assistant de configuration se lance automatiquement
    • Choisissez "Standard" pour l'installation
    • Sélectionnez votre thème (clair ou sombre)
    • Android Studio va télécharger le SDK Android et les outils nécessaires (environ 3 Go)
    • Cette étape peut prendre 10-30 minutes selon votre connexion
Lors du premier démarrage, Android Studio télécharge beaucoup de données (SDK Android, outils de build, émulateur). Prévoyez du temps et une bonne connexion internet. Une fois installé, vous n'aurez plus besoin de tout retélécharger !

Fonctionnalités d'Android Studio

Android Studio offre plusieurs fonctionnalités importantes :

  • Performance améliorée : Démarrage plus rapide, indexation plus efficace
  • Nouvel éditeur : Meilleure autocomplétion et suggestions
  • Device Manager modernisé : Interface simplifiée pour gérer les émulateurs
  • Support Kotlin 2.0 : Dernières fonctionnalités du langage
  • Intégration IA : Suggestions de code intelligentes (Gemini Code Assist)
  • Émulateurs optimisés : Meilleure performance, moins de RAM utilisée

⚙️ Étape 5 : Configuration des plugins Flutter et Dart

Maintenant qu'Android Studio est installé, ajoutons le support pour Flutter.

  1. Ouvrir le gestionnaire de plugins
    • Dans Android Studio, cliquez sur File → Settings (ou Ctrl+Alt+S)
    • Dans le menu de gauche, cliquez sur Plugins
  2. Rechercher et installer Flutter
    • Dans l'onglet "Marketplace", recherchez Flutter
    • Cliquez sur le plugin "Flutter" (par flutter.dev)
    • Cliquez sur "Install"
    • Le plugin Dart sera automatiquement installé en même temps
  3. Redémarrer Android Studio
    • Cliquez sur "Restart IDE" quand demandé
    • Android Studio va redémarrer avec le support Flutter activé
Après le redémarrage, Android Studio peut demander le chemin vers le SDK Flutter. Indiquez C:\dev\flutter (ou l'emplacement où vous avez extrait Flutter à l'étape 2).
Lors de la première installation, Android Studio télécharge plusieurs Go de données (SDK Android, outils, images système). Prévoyez du temps et une bonne connexion internet. Une fois installé, c'est fini !

📱 Étape 6 : Créer un émulateur Android

Pour tester vos applications Flutter sans appareil physique, vous devez créer un émulateur Android (AVD - Android Virtual Device).

  1. Ouvrir le Device Manager
    • Dans Android Studio, l'icône du Device Manager est dans la barre d'outils en haut
    • Ou via le menu : Tools → Device Manager
  2. Créer un nouvel appareil virtuel
    • Cliquez sur le bouton "+" ou "Create Device"
    • Choisissez un modèle d'appareil (recommandé : Pixel 6 ou Pixel 7)
    • Cliquez sur "Next"
  3. Sélectionner une image système
    • Choisissez API Level 34 (Android 14) ou API Level 33 (Android 13)
    • Prenez la version x86_64 (plus rapide sur PC Windows)
    • Si l'image n'est pas déjà téléchargée, cliquez sur "Download" à côté
    • Attendez le téléchargement (environ 1 Go)
    • Cliquez sur "Next"
  4. Configurer l'AVD
    • Donnez un nom à votre émulateur (ex: "Flutter Pixel 6")
    • Configuration recommandée :
      • RAM : 2048 Mo (2 Go)
      • Heap : 512 Mo
      • Stockage : 2 Go minimum
    • Cliquez sur "Finish"
Pour que l'émulateur soit rapide, assurez-vous que la virtualisation est activée dans votre BIOS (Intel VT-x ou AMD-V). Sans cela, l'émulateur sera très lent. Sur Windows 11, vérifiez aussi que Hyper-V n'est pas en conflit avec l'émulateur Android.

✅ Étape 7 : Vérification complète avec flutter doctor

Une fois tout installé, vérifiez que votre environnement est prêt.

# Vérifier Flutter
flutter --version

# Diagnostic complet
flutter doctor -v

# Lister les appareils disponibles (émulateurs et physiques)
flutter devices

# Créer un projet de test
flutter create mon_premier_projet
cd mon_premier_projet

# Lancer l'application
flutter run

Si flutter doctor affiche toutes les coches vertes (ou au moins celles pour votre plateforme cible), félicitations ! Votre environnement est prêt.

Schéma de l'environnement de développement Flutter sous Windows
Schéma de l'environnement de développement Flutter sous Windows

1.3.2 – Créer un projet avec Android Studio

Vous avez installé Flutter et Android Studio, et appris les bases de Dart. Il est maintenant temps de créer votre première application Flutter ! Dans cette section, nous allons créer un projet Flutter pas à pas avec Android Studio et découvrir la structure d'un projet Flutter.

🚀 Étape 1 : Ouvrir Android Studio

Lancez Android Studio. Vous arrivez sur l'écran de bienvenue.

écran de bienvenue
écran de bienvenue

📝 Étape 2 : Créer un nouveau projet Flutter

  1. Cliquez sur le bouton "New Project"
  2. Dans la fenêtre qui s'ouvre, sélectionnez "Flutter" dans la colonne de gauche
Fenêtre de sélection du type de projet

Dans la colonne de gauche, vous voyez :
• Empty Views Activity
• Phone and Tablet
Flutter ← SÉLECTIONNER CELUI-CI
• Wear OS
• TV
• Automotive

Dans la partie centrale, après avoir sélectionné Flutter :
• Icône Flutter (logo bleu/blanc)
• Description : "Create a new Flutter project"
• Bouton "Next" en bas à droite
Si "Flutter" n'apparaît pas dans la liste, c'est que le plugin Flutter n'est pas installé ou que le SDK Flutter n'est pas configuré correctement. Retournez à la section 1.1.3 pour vérifier votre installation.
  1. Cliquez sur "Next"

⚙️ Étape 3 : Configurer le projet

Vous arrivez sur la fenêtre de configuration du projet. Remplissez les champs suivants :

Champs à remplir :

  • Project name : Le nom de votre projet (ex: ma_premiere_app)
  • Project location : L'emplacement où sauvegarder le projet (ex: C:\Users\VotreNom\FlutterProjects)
  • Description : Une brève description (ex: "Ma première application Flutter")
  • Project type : Laissez "Application" sélectionné
  • Organization : Identifiant de votre organisation en notation inversée (ex: com.monnom)
  • Android language : Kotlin (recommandé)
  • Platforms : Cochez les plateformes cibles (Android, iOS, Web, Windows, etc.)
Fenêtre de configuration du projet Flutter

Exemple de configuration :
• Project name: ma_premiere_app
• Project location: C:\Users\dell\FlutterProjects\ma_premiere_app
• Description: Ma première application Flutter
• Project type: Application
• Organization: com.exemple
• Android language: Kotlin
• iOS language: Swift
• Platforms: ☑ Android ☑ iOS ☑ Web ☑ Windows

En bas : bouton "Create" (bleu)
Règles pour le nom du projet :
• Tout en minuscules
• Utilisez des underscores (_) pour séparer les mots
• Pas d'espaces, pas de tirets, pas de caractères spéciaux
• Exemples valides : mon_app, gestion_taches, calculatrice_simple
• Exemples invalides : MonApp, mon-app, mon app
À propos de l'Organization :

L'organization en notation inversée (ex: com.monnom) est utilisée pour créer l'identifiant unique de votre application :
• Android : com.monnom.ma_premiere_app
• iOS : com.monnom.maPremiereApp

Si vous publiez votre app, utilisez votre nom de domaine inversé. Sinon, com.exemple ou com.votreprenom suffisent pour apprendre.
  1. Une fois tous les champs remplis, cliquez sur "Create"

⏳ Étape 4 : Attendre la création du projet

Android Studio va maintenant créer votre projet Flutter. Cette opération prend quelques instants. Vous verrez :

  • Une barre de progression en bas de la fenêtre
  • Des messages comme "Creating Flutter project...", "Running pub get...", "Indexing..."
  • L'éditeur s'ouvre progressivement avec le fichier main.dart
La première fois, la création peut prendre 1 à 2 minutes car Android Studio doit télécharger les dépendances du projet. Soyez patient !

🎉 Étape 5 : Découvrir l'interface d'Android Studio

Une fois le projet créé, Android Studio affiche l'interface de développement. Voici les zones importantes :

Interface d'Android Studio avec un projet Flutter ouvert

À gauche : Project Explorer
• Vue arborescente des dossiers et fichiers
• Dossiers principaux : android/, ios/, lib/, test/, web/
• Le dossier lib/ contient main.dart (votre code)

Au centre : Éditeur de code
• Le fichier main.dart est ouvert par défaut
• Code de l'application de démonstration (compteur)
• Numéros de lignes à gauche
• Coloration syntaxique

En haut : Barre d'outils
• Sélecteur d'appareil (émulateur/appareil physique)
• Bouton ▶️ Run (vert) pour lancer l'app
• Bouton 🔨 Build
• Bouton 🐞 Debug

En bas : Panneaux d'outils
• Terminal intégré
• Messages de build
• Logs de l'application
• Flutter Inspector

À droite : Notifications et raccourcis Flutter

📂 Comprendre la structure du projet

Dans le Project Explorer (panneau de gauche), vous voyez la structure de votre projet Flutter. Voici les dossiers et fichiers les plus importants :

Vue Project Explorer dans Android Studio

Structure du projet ma_premiere_app :

📁 ma_premiere_app
├── 📁 .dart_tool/ (Fichiers internes Dart)
├── 📁 .idea/ (Configuration Android Studio)
├── 📁 android/ ← Configuration Android native
├── 📁 ios/ ← Configuration iOS native
├── 📁 lib/ 🎯 VOTRE CODE ICI !
│ └── 📄 main.dart ← Point d'entrée de l'app
├── 📁 test/ (Tests unitaires et widgets)
├── 📁 web/ (Configuration Web)
├── 📁 windows/ (Configuration Windows)
├── 📄 .gitignore (Fichiers à ignorer par Git)
├── 📄 .metadata (Métadonnées Flutter)
├── 📄 analysis_options.yaml (Configuration du linter)
├── 📄 pubspec.lock (Versions verrouillées)
├── 📄 pubspec.yaml 🔧 CONFIGURATION DU PROJET
└── 📄 README.md (Documentation)

🎯 Les dossiers clés à connaître

📁 lib/ - Votre code Dart

C'est ici que vous passerez 95% de votre temps ! Le dossier lib/ contient tout votre code Dart et Flutter.

Par défaut, il contient :

  • main.dart : Le point d'entrée de votre application

Pour un projet plus grand, organisez-le ainsi :

lib/
├── main.dart              # Point d'entrée
├── models/                # Classes de données
│   ├── utilisateur.dart
│   └── produit.dart
├── screens/               # Écrans de l'application
│   ├── home_screen.dart
│   ├── login_screen.dart
│   └── profile_screen.dart
├── widgets/               # Widgets réutilisables
│   ├── custom_button.dart
│   └── user_card.dart
└── services/              # Services (API, DB)
    └── api_service.dart
Comment créer ces dossiers dans Android Studio ?

1. Clic droit sur le dossier lib/
2. New → Directory
3. Tapez le nom (ex: screens)
4. Appuyez sur Entrée

Pour créer un fichier Dart :
1. Clic droit sur le dossier
2. New → Dart File
3. Tapez le nom (ex: home_screen)
4. Appuyez sur Entrée

📄 pubspec.yaml - Configuration du projet

C'est le fichier de configuration principal de votre projet. Double-cliquez dessus dans le Project Explorer pour l'ouvrir.

Il contient :

  • Métadonnées : nom, version, description
  • Dépendances : packages externes à installer
  • Assets : images, polices, fichiers
name: ma_premiere_app
description: "Ma première application Flutter"
version: 1.0.0+1

environment:
  sdk: '>=3.2.0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^2.0.0

flutter:
  uses-material-design: true
Ajouter un package avec Android Studio :

Méthode 1 : Avec l'interface
1. Ouvrez pubspec.yaml
2. Ajoutez le package sous dependencies:
3. Cliquez sur "Pub get" en haut de l'éditeur

Méthode 2 : Avec le terminal intégré
1. Ouvrez le terminal en bas (Alt+F12)
2. Tapez : flutter pub add nom_du_package
3. Le package est automatiquement ajouté et téléchargé

📁 android/ et ios/ - Configurations natives

Ces dossiers contiennent les projets Android et iOS natifs. Flutter les gère automatiquement, mais vous devrez parfois les modifier pour :

  • Android : Ajouter des permissions dans AndroidManifest.xml
  • iOS : Configurer les permissions dans Info.plist
  • Changer l'icône de l'application
  • Modifier le nom de l'application
Pour démarrer, vous n'avez pas besoin de toucher à ces dossiers. Concentrez-vous sur lib/ pour apprendre Flutter. Vous les explorerez plus tard pour les configurations avancées.

📁 test/ - Tests de l'application

Contient les tests unitaires et widgets. Flutter encourage fortement les tests pour assurer la qualité de votre code.

👀 Explorer le fichier main.dart

Dans l'éditeur central, Android Studio a ouvert automatiquement le fichier lib/main.dart. C'est le point d'entrée de votre application.

Voici à quoi ressemble le code par défaut :

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

Ne vous inquiétez pas si ce code vous semble complexe ! Nous allons le découvrir en détail dans la prochaine section.

▶️ Étape 6 : Lancer votre première application

Maintenant, lançons l'application sur un émulateur ou un appareil physique.

1. Sélectionner un appareil

En haut de la fenêtre Android Studio, vous voyez un sélecteur d'appareil. Cliquez dessus pour voir les options disponibles.

Sélecteur d'appareil dans la barre d'outils

Vous voyez :
• 📱 Votre émulateur Android (ex: "Pixel 6 API 34")
• 📱 Appareils physiques connectés (s'il y en a)
• 🌐 Chrome (pour version Web)
• 💻 Windows (pour version Desktop)
• ➕ "Device Manager" pour créer un nouvel émulateur

Si vous n'avez aucun appareil :

  1. Cliquez sur "Device Manager" dans le sélecteur
  2. Cliquez sur "+ Create Device"
  3. Choisissez un modèle (ex: Pixel 6)
  4. Sélectionnez une image système (ex: API 34)
  5. Cliquez sur "Finish"
  6. Lancez l'émulateur avec le bouton ▶️

2. Lancer l'application

Une fois un appareil sélectionné, cliquez sur le grand bouton vert ▶️ Run en haut à droite.

Raccourci clavier : Appuyez sur Shift+F10 pour lancer l'application rapidement.

3. Attendre la compilation

La première compilation prend du temps (1 à 3 minutes). Vous verrez dans le panneau inférieur :

  • "Running Gradle task 'assembleDebug'..." (Android)
  • "Building..." avec une barre de progression
  • Logs de compilation
La première compilation est toujours longue. Les suivantes seront beaucoup plus rapides grâce au cache ! Soyez patient pour cette première fois.
Lors de la première compilation, Gradle télécharge des dépendances. C'est normal que cela prenne du temps. Les compilations suivantes seront beaucoup plus rapides (quelques secondes).

4. Découvrir l'application de démonstration

Une fois la compilation terminée, l'application se lance automatiquement sur l'émulateur ou l'appareil. Vous voyez :

  • Une barre d'application (AppBar) en haut avec le titre "Flutter Demo Home Page"
  • Un texte central : "You have pushed the button this many times:"
  • Un compteur qui affiche 0
  • Un bouton flottant (rond, violet) en bas à droite avec un "+"

Cliquez sur le bouton + : le compteur augmente ! C'est l'application de démonstration classique de Flutter.

Application de démonstration Flutter

En haut : Barre violette avec "Flutter Demo Home Page"
Au centre :
• Texte : "You have pushed the button this many times:"
• Grand nombre : "0" (augmente à chaque clic)
En bas à droite : Bouton rond violet avec icône "+"

⚡ Découvrir le Hot Reload

Le Hot Reload est la fonctionnalité magique de Flutter. Testons-la !

  1. Dans main.dart, cherchez la ligne avec le texte "You have pushed the button this many times"
  2. Modifiez-le en : "Nombre de clics :"
  3. Sauvegardez le fichier (Ctrl+S ou Cmd+S)
  4. Regardez l'émulateur : le texte change instantanément sans relancer l'app !
Le Hot Reload conserve l'état de l'application. Si votre compteur était à 5, il restera à 5 après le Hot Reload. C'est ultra-pratique pour tester rapidement des modifications visuelles !

📱 Tester sur un téléphone Android physique

Pour de meilleures performances et tester en conditions réelles, connectez un véritable téléphone Android.

Étapes pour activer le débogage USB

  1. Activer le Mode Développeur
    • Sur votre téléphone Android, allez dans Paramètres → À propos du téléphone
    • Appuyez 7 fois rapidement sur "Numéro de build" ou "Version du logiciel"
    • Un message "Vous êtes maintenant développeur !" s'affiche
  2. Activer le Débogage USB
    • Retournez aux Paramètres principaux
    • Allez dans Options pour les développeurs
    • Activez "Débogage USB"
  3. Connecter le téléphone
    • Connectez votre téléphone à l'ordinateur avec un câble USB
    • Sur le téléphone, autorisez le débogage USB (popup qui apparaît)
    • Cochez "Toujours autoriser depuis cet ordinateur"
  4. Vérifier la détection
    • Dans PowerShell, tapez : flutter devices
    • Votre téléphone devrait apparaître dans la liste
    • Dans Android Studio, il apparaît aussi dans la liste des appareils en haut
  5. Lancer l'application
    • Sélectionnez votre téléphone dans la liste des appareils
    • Cliquez sur Run (▶️)
    • L'app s'installe et se lance sur votre téléphone !
Les téléphones physiques sont plus rapides que les émulateurs et donnent un aperçu réel de l'expérience utilisateur. Utilisez-les autant que possible, surtout pour tester les performances, les animations et la fluidité. Le Hot Reload fonctionne aussi sur appareil physique !

🛠️ Outils Android Studio pour Flutter

Flutter Inspector

En bas à droite, vous avez accès au Flutter Inspector, un outil puissant pour :

  • Visualiser l'arborescence des widgets
  • Inspecter les propriétés de chaque widget
  • Déboguer la mise en page (layout)
  • Activer les repères visuels (grid overlay)

Flutter Outline

À droite de l'éditeur, l'onglet "Flutter Outline" affiche la structure des widgets de votre fichier. C'est très utile pour naviguer dans du code complexe.

Terminal intégré

En bas, l'onglet "Terminal" vous permet d'exécuter des commandes Flutter directement :

# Voir les appareils disponibles
flutter devices

# Installer un package
flutter pub add http

# Analyser le code
flutter analyze

# Nettoyer le projet
flutter clean

❓ Problèmes courants sous Windows

1. Flutter n'est pas reconnu comme commande

Problème : Quand vous tapez flutter dans PowerShell, vous voyez l'erreur "Le terme 'flutter' n'est pas reconnu..."

Solution :

  • Vérifiez que vous avez bien ajouté C:\dev\flutter\bin au PATH
  • Fermez et rouvrez PowerShell (important !)
  • Si le problème persiste, redémarrez Windows

2. Android licenses not accepted

Problème : flutter doctor affiche [✗] Android licenses not accepted

Solution :

# Dans PowerShell, exécutez :
flutter doctor --android-licenses

# Tapez 'y' pour accepter chaque licence
# (il y en a environ 6-8)

3. L'émulateur ne démarre pas ou est très lent

Problème : L'émulateur Android ne démarre pas ou est extrêmement lent.

Solutions :

  • Vérifier la virtualisation : Entrez dans le BIOS et activez Intel VT-x ou AMD-V
  • Désactiver Hyper-V (Windows 11) : Ouvrez PowerShell en admin et exécutez :
    bcdedit /set hypervisorlaunchtype off
  • Allouer plus de RAM : Dans Device Manager, éditez l'AVD et augmentez la RAM à 2048 Mo
  • Utiliser x86_64 : Assurez-vous d'avoir téléchargé l'image système x86_64 (pas ARM)

4. Gradle build failed

Problème : La compilation échoue avec des erreurs Gradle.

Solutions :

  • Vérifiez votre connexion internet (Gradle télécharge des dépendances)
  • Nettoyez le projet : flutter clean puis réessayez
  • Supprimez le cache Gradle : Supprimez le dossier C:\Users\VotreNom\.gradle

5. Unable to find bundled Java version

Problème : Erreur concernant Java/JDK manquant.

Solution : Android Studio inclut Java. Si l'erreur persiste, réinstallez Android Studio.

Pour un diagnostic détaillé de n'importe quel problème, exécutez :
flutter doctor -v
Cette commande affiche tous les détails de votre configuration. Copiez-collez les messages d'erreur dans Google pour trouver des solutions spécifiques.

💡 Points clés à retenir

  • lib/ : Votre code Dart (c'est là que vous travaillez)
  • main.dart : Point d'entrée de l'application
  • pubspec.yaml : Configuration, dépendances, assets
  • Dossiers de plateforme (android/, ios/, etc.) : Configurations natives
  • test/ : Tests unitaires et widgets
  • Organisation : Séparer en models/, screens/, widgets/, services/
  • flutter pub get : Installer les dépendances
  • flutter run : Lancer l'application
  • Hot Reload : Modifications instantanées sans relancer l'app
Prenez le temps de bien comprendre cette structure de projet. C'est la base de tout développement Flutter. Une bonne organisation dès le début vous évitera beaucoup de problèmes plus tard quand votre application grandira.

🎉 Félicitations !

Votre environnement de développement Flutter est maintenant complètement opérationnel sur Windows avec Android Studio. Vous avez :

  • ✅ Installé Flutter SDK
  • ✅ Configuré Android Studio
  • ✅ Installé les plugins Flutter et Dart
  • ✅ Créé un émulateur Android
  • ✅ Lancé votre première application
  • ✅ Testé le Hot Reload

Vous êtes maintenant prêt à plonger dans le développement Flutter et créer des applications Android incroyables ! 🚀


1.3.3 – runApp, MaterialApp

Maintenant que vous avez créé votre projet Flutter, il est temps de comprendre comment fonctionne le code du fichier main.dart. Dans cette section, nous allons décortiquer les deux fonctions essentielles qui démarrent toute application Flutter : runApp() et MaterialApp.

🚀 La fonction main() - Le point d'entrée

Comme dans tout programme Dart, l'exécution commence par la fonction main(). C'est le point d'entrée de votre application.

void main() {
  runApp(const MyApp());
}

Cette fonction fait une seule chose : elle appelle runApp() en lui passant un widget (ici MyApp).

Pourquoi main() est-elle si courte ?

En Flutter, on sépare les responsabilités :
main() : Lance l'application
runApp() : Initialise le framework Flutter
MyApp : Définit l'application elle-même

Cette séparation rend le code plus clair et organisé.

🎯 runApp() - Initialiser l'application Flutter

La fonction runApp() est fournie par Flutter. Elle prend un widget en paramètre et en fait la racine de votre application.

// Fonction fournie par Flutter
void runApp(Widget app) {
  // Initialise le framework Flutter
  // Configure le moteur de rendu
  // Affiche le widget à l'écran
}

Que fait runApp() exactement ?

  1. Initialise le framework : Configure tous les systèmes internes de Flutter
  2. Attache le widget à l'écran : Le widget passé devient la racine de l'arbre des widgets
  3. Lance le premier rendu : Affiche l'interface à l'écran
  4. Démarre la boucle d'événements : Écoute les interactions utilisateur
Vous pouvez appeler runApp() avec n'importe quel widget, mais en pratique, on utilise toujours MaterialApp ou CupertinoApp comme widget racine.

📱 MaterialApp - Le widget racine

MaterialApp est un widget spécial fourni par Flutter. Il configure toute votre application pour utiliser le Material Design de Google.

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

Rôle de MaterialApp

MaterialApp configure automatiquement :

  • Le thème : Couleurs, polices, styles de toute l'application
  • La navigation : Système de routes et de pages
  • Les localisations : Support multilingue
  • Les animations : Transitions entre pages
  • Les overlays : Dialogues, snackbars, etc.

🔧 Propriétés importantes de MaterialApp

1. title - Le titre de l'application

MaterialApp(
  title: 'Ma Super App',  // Titre de l'app (visible dans le multitâche)
  // ...
)

Le title est utilisé par le système d'exploitation pour identifier votre application dans le gestionnaire de tâches.

2. home - La page d'accueil

MaterialApp(
  home: const MyHomePage(title: 'Accueil'),  // Premier écran affiché
  // ...
)

home définit le premier écran que verra l'utilisateur au lancement de l'application.

3. theme - Le thème visuel

MaterialApp(
  theme: ThemeData(
    colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
    useMaterial3: true,  // Utiliser Material Design 3
  ),
  // ...
)

Le theme définit l'apparence globale de votre application : couleurs primaires, secondaires, polices, formes des boutons, etc.

Avec ColorScheme.fromSeed(), Flutter génère automatiquement une palette de couleurs harmonieuse à partir d'une seule couleur de base. C'est pratique pour avoir un design cohérent !

4. debugShowCheckedModeBanner - Bannière de debug

MaterialApp(
  debugShowCheckedModeBanner: false,  // Masquer "DEBUG"
  // ...
)

Par défaut, Flutter affiche une bannière "DEBUG" en haut à droite en mode développement. Cette propriété permet de la masquer.

5. routes - Navigation entre écrans

MaterialApp(
  initialRoute: '/',
  routes: {
    '/': (context) => HomeScreen(),
    '/profile': (context) => ProfileScreen(),
    '/settings': (context) => SettingsScreen(),
  },
)

Les routes définissent la navigation dans votre application. Chaque route est associée à un écran.

6. darkTheme - Mode sombre

MaterialApp(
  theme: ThemeData.light(),      // Thème clair
  darkTheme: ThemeData.dark(),   // Thème sombre
  themeMode: ThemeMode.system,   // Suit les préférences système
)

🎨 Exemple complet avec explications

Reprenons le code de main.dart et expliquons chaque partie :

// 1. Import du package Flutter Material Design
import 'package:flutter/material.dart';

// 2. Point d'entrée de l'application
void main() {
  // 3. Lancer l'application avec MyApp comme widget racine
  runApp(const MyApp());
}

// 4. Widget racine de l'application (StatelessWidget car il ne change pas)
class MyApp extends StatelessWidget {
  // Constructeur avec une clé pour optimisation
  const MyApp({super.key});

  // 5. Méthode build : définit ce que affiche ce widget
  @override
  Widget build(BuildContext context) {
    // 6. Retourner MaterialApp comme widget principal
    return MaterialApp(
      // Titre de l'application (multitâche)
      title: 'Flutter Demo',
      
      // Configuration du thème
      theme: ThemeData(
        // Palette de couleurs générée depuis violet
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        // Utiliser Material Design 3 (plus moderne)
        useMaterial3: true,
      ),
      
      // Page d'accueil de l'application
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

🔄 Flux d'exécution

Voici comment Flutter démarre votre application :

Flux d'exécution d'une application Flutter
Comprendre l’arborescence des widgets Flutter
Flux d'exécution d'une application Flutter
Flux d'exécution d'une application Flutter

1. Lancement
• Le système lance l'application
• Dart exécute la fonction main()

2. Initialisation
main() appelle runApp(MyApp())
• Flutter initialise le framework

3. Construction du widget racine
• Flutter appelle MyApp.build()
MyApp retourne un MaterialApp

4. Configuration de l'application
MaterialApp configure le thème
MaterialApp charge la page home

5. Affichage
• La page d'accueil s'affiche à l'écran
• L'application est prête !

🎯 Modifier votre première application

Essayons de personnaliser MaterialApp pour mieux comprendre :

Exercice 1 : Changer le titre

MaterialApp(
  title: 'Mon Application',  // Changez ce texte
  // ...
)

Sauvegardez et regardez le titre dans le multitâche de votre téléphone/émulateur.

Exercice 2 : Changer la couleur principale

theme: ThemeData(
  colorScheme: ColorScheme.fromSeed(seedColor: Colors.red),  // Essayez différentes couleurs
  useMaterial3: true,
),

Sauvegardez (Hot Reload) et voyez la barre d'application changer de couleur !

Couleurs disponibles :
Colors.red, Colors.blue, Colors.green, Colors.orange, Colors.purple, Colors.pink, Colors.teal, Colors.amber, etc.

Exercice 3 : Masquer la bannière DEBUG

MaterialApp(
  debugShowCheckedModeBanner: false,  // Ajoutez cette ligne
  title: 'Mon Application',
  // ...
)

La bannière rouge "DEBUG" disparaît !

📱 CupertinoApp - Alternative iOS

Flutter fournit aussi CupertinoApp pour créer des applications avec le design iOS (Cupertino).

import 'package:flutter/cupertino.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      title: 'App iOS Style',
      theme: const CupertinoThemeData(
        primaryColor: CupertinoColors.systemBlue,
      ),
      home: const CupertinoPageScaffold(
        navigationBar: CupertinoNavigationBar(
          middle: Text('Accueil'),
        ),
        child: Center(
          child: Text('Style iOS'),
        ),
      ),
    );
  }
}
Material vs Cupertino :

MaterialApp : Design Android/Google (anguleux, coloré)
CupertinoApp : Design iOS/Apple (arrondi, minimaliste)

En pratique, la plupart des applications Flutter utilisent MaterialApp car il fonctionne bien sur toutes les plateformes.

🔍 Approfondir : Options avancées de MaterialApp

Localisation multilingue

import 'package:flutter_localizations/flutter_localizations.dart';

MaterialApp(
  localizationsDelegates: const [
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
    GlobalCupertinoLocalizations.delegate,
  ],
  supportedLocales: const [
    Locale('en', ''), // Anglais
    Locale('fr', ''), // Français
    Locale('es', ''), // Espagnol
  ],
  // ...
)

Gestion des erreurs

MaterialApp(
  builder: (context, widget) {
    // Personnaliser l'apparence de toute l'app
    return MediaQuery(
      data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
      child: widget!,
    );
  },
  // ...
)

Redirection de navigation

MaterialApp(
  onGenerateRoute: (settings) {
    // Logique personnalisée pour la navigation
    if (settings.name == '/special') {
      return MaterialPageRoute(
        builder: (context) => SpecialScreen(),
      );
    }
    return null;
  },
  // ...
)

💡 Points clés à retenir

  • main() : Point d'entrée de l'application, appelle runApp()
  • runApp() : Initialise Flutter et affiche le widget racine
  • MaterialApp : Widget racine qui configure toute l'application
  • title : Nom de l'application dans le multitâche
  • theme : Apparence globale (couleurs, styles)
  • home : Premier écran affiché
  • StatelessWidget : Widget qui ne change pas (nous verrons StatefulWidget plus tard)
  • build() : Méthode qui définit ce qu'affiche un widget
Tout est Widget en Flutter !

MaterialApp est un widget
MyApp est un widget
• Même votre page d'accueil est un widget

Flutter construit l'interface en assemblant des widgets comme des briques LEGO. C'est le concept fondamental à comprendre !

🎓 Mini-projet : Créer une application personnalisée

Créons une application simple pour mettre en pratique ce que nous avons appris :

import 'package:flutter/material.dart';

void main() {
  runApp(const MonApplication());
}

class MonApplication extends StatelessWidget {
  const MonApplication({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // Configuration de l'application
      debugShowCheckedModeBanner: false,
      title: 'Ma Première App',
      
      // Thème personnalisé
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.teal,
          brightness: Brightness.light,
        ),
        useMaterial3: true,
      ),
      
      // Page d'accueil
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Bienvenue'),
          centerTitle: true,
        ),
        body: const Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Icon(
                Icons.star,
                size: 100,
                color: Colors.teal,
              ),
              SizedBox(height: 20),
              Text(
                'Bonjour Flutter !',
                style: TextStyle(
                  fontSize: 32,
                  fontWeight: FontWeight.bold,
                ),
              ),
              SizedBox(height: 10),
              Text(
                'Ma première application personnalisée',
                style: TextStyle(
                  fontSize: 16,
                  color: Colors.grey,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Cette application affiche un écran simple avec une étoile et un message de bienvenue. Copiez ce code dans votre main.dart, sauvegardez et admirez le résultat !

Pour aller plus loin :

Modifiez ce code pour :
• Changer l'icône (Icons.favorite, Icons.rocket, etc.)
• Modifier les couleurs
• Changer les textes
• Ajouter plus d'éléments dans la Column

Expérimentez et voyez les changements en temps réel avec le Hot Reload !

1.3.3 – Exécution sur émulateur / mobile

Vous avez créé votre projet Flutter et compris la structure du code. Il est maintenant temps d'exécuter votre application sur différents appareils ! Dans cette section, nous allons voir comment lancer votre app sur un émulateur Android, un appareil physique, et même tester sur d'autres plateformes comme Windows ou le Web.

📱 Exécution sur émulateur Android

L'émulateur Android est parfait pour tester rapidement votre application sans avoir besoin d'un appareil physique.

Vérifier les émulateurs disponibles

Dans Android Studio, en haut de la fenêtre, vous voyez le sélecteur d'appareil. Cliquez dessus pour voir les options disponibles.

Sélecteur d'appareil dans Android Studio

Le menu déroulant affiche :
• 📱 Émulateurs Android (ex: "Pixel 6 API 34")
• 📱 Appareils physiques connectés en USB
• 🌐 Chrome (pour version Web)
• 💻 Windows (pour version Desktop)
• ➕ Device Manager (pour gérer les émulateurs)

Si vous n'avez pas d'émulateur

Si aucun émulateur n'apparaît, créez-en un :

  1. Cliquez sur le sélecteur d'appareil
  2. Sélectionnez "Device Manager"
  3. Dans le panneau qui s'ouvre, cliquez sur "Create Device"
Device Manager - Créer un appareil virtuel

Étape 1 : Sélectionner le matériel
• Catégorie "Phone" sélectionnée
• Liste de modèles (Pixel 7, Pixel 6, Pixel 5, etc.)
• Recommandation : Choisir Pixel 6 ou Pixel 7
• Bouton "Next" en bas
  1. Choisissez un modèle d'appareil (ex: Pixel 6)
  2. Cliquez sur "Next"
Étape 2 : Sélectionner l'image système

• Onglet "Recommended" sélectionné
• Liste des versions Android disponibles
UpsideDownCake (API 34) - Android 14.0 - Recommandé
• Colonne "ABI" : x86_64
• Bouton "Download" si pas encore téléchargé
• Bouton "Next" quand téléchargé
  1. Sélectionnez une image système (recommandé : UpsideDownCake - API 34)
  2. Si l'image n'est pas téléchargée, cliquez sur "Download" (cela peut prendre quelques minutes)
  3. Une fois téléchargée, cliquez sur "Next"
Étape 3 : Vérifier la configuration

• AVD Name : Pixel_6_API_34
• System image : UpsideDownCake x86_64 Android 14.0 (Google APIs)
• Startup orientation : Portrait
• Emulated Performance : Hardware - GLES 2.0
• Bouton "Finish" pour créer l'émulateur
  1. Vérifiez la configuration et cliquez sur "Finish"
Quelle version Android choisir ?

API 34 (Android 14) : La plus récente, recommandée
API 33 (Android 13) : Très répandu
API 30-31 : Compatibilité avec appareils plus anciens

Pour débuter, choisissez la dernière version stable (API 34).

Démarrer l'émulateur

Une fois l'émulateur créé :

  1. Dans le Device Manager, vous voyez votre nouvel émulateur
  2. Cliquez sur le bouton ▶️ (Play) à côté de son nom
  3. L'émulateur se lance (cela prend 30 secondes à 1 minute la première fois)
  4. Vous voyez l'écran Android s'afficher dans une fenêtre séparée
Le premier démarrage d'un émulateur est toujours long. Une fois démarré, laissez-le ouvert pendant que vous développez. Vous n'aurez pas besoin de le redémarrer.

Lancer votre application sur l'émulateur

Maintenant que l'émulateur est en cours d'exécution :

  1. Retournez dans Android Studio
  2. Vérifiez que votre émulateur est sélectionné dans le sélecteur d'appareil (en haut)
  3. Cliquez sur le bouton vert ▶️ Run (ou appuyez sur Shift+F10)
  4. Android Studio compile et installe l'application sur l'émulateur
Panneau "Run" pendant la compilation

En bas d'Android Studio, l'onglet "Run" affiche :
• "Launching lib/main.dart on Pixel 6 API 34 in debug mode..."
• "Running Gradle task 'assembleDebug'..."
• Barre de progression
• Logs de compilation défilants
• Après 1-3 minutes (première fois) : "✓ Built build/app/outputs/flutter-apk/app-debug.apk"
• "Installing build/app/outputs/flutter-apk/app.apk..."
• "Syncing files to device Pixel 6 API 34..."
• "Flutter run key commands."

Première compilation : 1 à 3 minutes
Compilations suivantes : 10 à 30 secondes (grâce au cache)

📲 Exécution sur appareil physique Android

Tester sur un vrai téléphone offre une meilleure expérience et des performances plus réalistes.

Étape 1 : Activer le Mode Développeur

Sur votre téléphone Android :

  1. Ouvrez Paramètres
  2. Allez dans À propos du téléphone (ou Informations)
  3. Trouvez "Numéro de build" (ou "Version MIUI" pour Xiaomi)
  4. Appuyez 7 fois rapidement sur cette ligne
  5. Un message apparaît : "Vous êtes maintenant développeur !"
Emplacement du "Numéro de build" selon les marques :

Samsung : Paramètres → À propos du téléphone → Informations sur le logiciel
Xiaomi : Paramètres → À propos du téléphone → Version MIUI
Google Pixel : Paramètres → À propos du téléphone → Numéro de build
OnePlus : Paramètres → À propos du téléphone → Numéro de build
Huawei : Paramètres → Système → À propos du téléphone

Étape 2 : Activer le Débogage USB

  1. Retournez dans Paramètres
  2. Cherchez "Options pour les développeurs" (souvent dans Système ou Paramètres supplémentaires)
  3. Activez "Options pour les développeurs" (interrupteur en haut)
  4. Descendez et activez "Débogage USB"
  5. Une boîte de dialogue apparaît : confirmez avec "OK"
Le débogage USB permet à votre ordinateur de communiquer avec votre téléphone pour y installer et déboguer des applications. C'est sans danger, mais pensez à le désactiver après vos sessions de développement si vous prêtez votre téléphone.

Étape 3 : Connecter le téléphone à l'ordinateur

  1. Branchez votre téléphone à votre ordinateur avec un câble USB
  2. Sur le téléphone, une notification apparaît : "Autoriser le débogage USB ?"
  3. Cochez "Toujours autoriser depuis cet ordinateur"
  4. Appuyez sur "Autoriser" ou "OK"
Si la notification n'apparaît pas, vérifiez que :
• Le câble USB est de bonne qualité (certains câbles ne transmettent que la charge)
• Le mode de connexion USB est en "Transfert de fichiers" ou "MTP" (pas juste "Charge")
• Les pilotes USB de votre téléphone sont installés sur Windows

Étape 4 : Vérifier la connexion

Dans Android Studio :

  1. Regardez le sélecteur d'appareil en haut
  2. Vous devriez voir votre téléphone apparaître (ex: "Samsung Galaxy S23")

Ou dans le terminal intégré, tapez :

flutter devices

Vous devriez voir votre appareil listé :

2 connected devices:

SM G991B (mobile) • R5CR20XXXXX • android-arm64 • Android 14 (API 34)
Chrome (web)      • chrome      • web-javascript • Google Chrome 120.0

Étape 5 : Lancer l'application

  1. Sélectionnez votre appareil dans le sélecteur
  2. Cliquez sur ▶️ Run
  3. L'application s'installe sur votre téléphone
  4. Elle se lance automatiquement
Les appareils physiques sont beaucoup plus rapides que les émulateurs ! Utilisez-les autant que possible pour développer. Les performances, les animations et les interactions tactiles sont bien plus réalistes.

🌐 Exécution sur navigateur Web (Chrome)

Flutter permet aussi de créer des applications Web ! Testons cela.

Vérifier la disponibilité

# Dans le terminal intégré
flutter devices

Vous devriez voir Chrome dans la liste :

Chrome (web) • chrome • web-javascript • Google Chrome 120.0

Lancer sur Chrome

  1. Dans le sélecteur d'appareil, choisissez "Chrome (web)"
  2. Cliquez sur ▶️ Run
  3. Une fenêtre Chrome s'ouvre automatiquement
  4. Votre application Flutter s'affiche dans le navigateur !
Avantages de la version Web :

• Pas besoin d'émulateur ou d'appareil
• Hot Reload ultra-rapide
• Parfait pour tester rapidement l'interface
• Utilise les DevTools du navigateur

Limitations :
• Certaines fonctionnalités natives ne sont pas disponibles
• Performances légèrement différentes du mobile

💻 Exécution sur Windows Desktop

Flutter permet de créer des applications Windows natives !

Vérifier la disponibilité

flutter devices

Si configuré, vous verrez :

Windows (desktop) • windows • windows-x64 • Microsoft Windows

Lancer sur Windows

  1. Sélectionnez "Windows (desktop)"
  2. Cliquez sur ▶️ Run
  3. Une fenêtre Windows s'ouvre avec votre application !
L'application Windows est une vraie application native ! Elle peut être redimensionnée, minimisée, et s'intègre parfaitement dans l'écosystème Windows.

⚡ Hot Reload et Hot Restart

Maintenant que votre application tourne, découvrons deux fonctionnalités magiques de Flutter.

Hot Reload (⚡)

Le Hot Reload injecte vos modifications dans l'application en cours d'exécution sans la relancer.

Comment l'utiliser :

  1. Modifiez votre code dans main.dart
  2. Sauvegardez le fichier (Ctrl+S ou Cmd+S)
  3. Les changements apparaissent instantanément dans l'app !

Ou utilisez :

  • Le bouton ⚡ Hot Reload dans la barre d'outils d'Android Studio
  • Le raccourci Ctrl+\ (Windows) ou Cmd+\ (Mac)
  • Dans le terminal : tapez r et Entrée
Ce qui est conservé avec Hot Reload :

• L'état de l'application (variables, compteurs, etc.)
• La position dans la navigation
• Les données en mémoire

Exemple : Si votre compteur est à 5 et que vous modifiez le texte, il restera à 5 après le Hot Reload.

Hot Restart (🔄)

Le Hot Restart redémarre complètement l'application mais sans recompiler tout le code.

Quand l'utiliser :

  • Après avoir modifié du code d'initialisation (main())
  • Quand Hot Reload ne suffit pas
  • Pour réinitialiser l'état de l'application

Comment l'utiliser :

  • Bouton 🔄 Hot Restart dans Android Studio
  • Raccourci Ctrl+Shift+\
  • Dans le terminal : tapez R (majuscule) et Entrée

🛠️ Commandes utiles pendant l'exécution

Quand votre application tourne, vous avez accès à plusieurs commandes dans le terminal :

Flutter run key commands:
r  Hot reload. 🔥🔥🔥                    # Recharger les changements
R  Hot restart.                         # Redémarrer l'app
h  List all available commands.         # Afficher toutes les commandes
d  Detach (terminate "flutter run").    # Détacher le debugger
c  Clear the screen                     # Nettoyer l'écran
q  Quit (terminate the application).    # Quitter l'application

# Commandes avancées
p  Toggle performance overlay.          # Afficher les stats de performance
P  Toggle performance overlay (specific). # Stats détaillées
i  Toggle widget inspector.             # Inspecteur de widgets
o  Simulate different operating systems. # Tester différents OS
z  Toggle elevation (Material).         # Afficher les élévations
t  Dump rendering tree to console.      # Afficher l'arbre de rendu
L  Dump layer tree to console.          # Afficher les layers

🐛 Déboguer votre application

Mode Debug vs Release

Par défaut, flutter run lance l'application en mode Debug.

  • Mode Debug : Hot Reload activé, performances moyennes, messages de debug
  • Mode Release : Performances optimales, pas de Hot Reload, fichier plus léger
# Lancer en mode release (pour tester les performances réelles)
flutter run --release

# Lancer en mode profile (pour profiler les performances)
flutter run --profile
Ne jugez jamais les performances de votre app en mode Debug ! Le mode Debug est plus lent car il inclut des outils de débogage. Testez toujours en mode Release pour évaluer les vraies performances.

Logs et Console

Pour afficher des informations dans la console :

// Dans votre code
print('Message de debug');
print('Valeur : $variable');
debugPrint('Message avec debugPrint');  // Recommandé pour Flutter

Les logs apparaissent dans le panneau "Run" en bas d'Android Studio.

🎯 Résoudre les problèmes courants

L'application ne se lance pas

Solutions :

  • Vérifiez que l'appareil est bien connecté : flutter devices
  • Redémarrez l'émulateur ou reconnectez l'appareil
  • Nettoyez le projet : flutter clean puis flutter pub get
  • Vérifiez les erreurs de compilation dans le panneau "Run"

Hot Reload ne fonctionne pas

Solutions :

  • Essayez Hot Restart (R) au lieu de Hot Reload (r)
  • Vérifiez qu'il n'y a pas d'erreurs de syntaxe
  • Relancez complètement l'application

L'émulateur est très lent

Solutions :

  • Activez la virtualisation (Intel VT-x ou AMD-V) dans le BIOS
  • Allouez plus de RAM à l'émulateur (via Device Manager → Edit)
  • Utilisez une image système sans Google Play (plus légère)
  • Fermez les autres applications gourmandes en ressources
  • Ou mieux : utilisez un appareil physique !

Erreur "Gradle build failed"

Solutions :

# Nettoyer le projet
flutter clean

# Récupérer les dépendances
flutter pub get

# Relancer
flutter run

💡 Points clés à retenir

  • Émulateur Android : Créer via Device Manager, pratique pour tester sans appareil
  • Appareil physique : Activer mode développeur + débogage USB, meilleure expérience
  • Version Web : Lancer sur Chrome, parfait pour tests rapides
  • Version Windows : Application desktop native
  • Hot Reload (r) : Recharger les changements sans perdre l'état
  • Hot Restart (R) : Redémarrer l'app complètement
  • Mode Debug : Pour développer (avec Hot Reload)
  • Mode Release : Pour tester les vraies performances
  • flutter devices : Voir tous les appareils disponibles
  • Ctrl+S : Déclencher Hot Reload automatiquement
Workflow recommandé :

1. Démarrez l'émulateur ou connectez votre téléphone
2. Lancez l'app une fois avec ▶️ Run
3. Laissez l'app tourner pendant que vous développez
4. Modifiez le code et sauvegardez (Ctrl+S)
5. Hot Reload applique les changements instantanément
6. Répétez les étapes 4-5 autant que nécessaire
7. Ne relancez l'app que si nécessaire (Hot Restart ou changement de configuration)
🎉 Félicitations !

Vous avez terminé le Chapitre 1 — Introduction à Flutter & Dart !

Vous savez maintenant :
✅ Ce qu'est Flutter et comment l'installer
✅ Les bases de Dart (types, OOP, bonnes pratiques)
✅ Créer un projet Flutter avec Android Studio
✅ Comprendre la structure d'un projet
✅ Comment fonctionne runApp() et MaterialApp
✅ Exécuter votre app sur émulateur, appareil physique, Web et Windows
✅ Utiliser le Hot Reload pour développer rapidement

Vous êtes prêt à plonger dans le monde des widgets Flutter ! 🚀