CHAPITRE 2.3

Construire progressivement une interface Flutter

Créez des interfaces structurées et professionnelles
Dans le chapitre précédent, vous avez créé votre première application Flutter avec Directionality et Text(). Maintenant, nous allons construire progressivement une interface plus complète et professionnelle. Nous découvrirons MaterialApp, qui simplifie beaucoup de choses, puis nous ajouterons des widgets pour structurer et organiser votre interface. Chaque étape introduira un seul nouveau concept, avec du code minimal et clair.

2.3Construire progressivement une interface Flutter

2.3.1 – Introduction à MaterialApp

Dans le chapitre précédent, nous avons utilisé Directionality pour afficher du texte. Cela fonctionne, mais Flutter propose un widget plus puissant et plus simple : MaterialApp. C'est le widget que vous utiliserez dans presque toutes vos applications Flutter.

🎯 Pourquoi MaterialApp ?

MaterialApp est un widget spécial qui configure automatiquement beaucoup de choses pour votre application :

  • Il fournit automatiquement le contexte de direction (plus besoin de Directionality manuellement)
  • Il configure un thème par défaut (couleurs, polices, styles)
  • Il gère la navigation entre les écrans
  • Il applique le design Material Design (le style de design de Google)
Qu'est-ce que Material Design ?
Material Design est un système de design créé par Google. Il définit des règles pour les couleurs, les typographies, les espacements, les animations, etc. En utilisant MaterialApp, votre application suit automatiquement ces règles, ce qui donne un rendu professionnel et cohérent.

📝 Structure minimale

Voici la structure minimale de MaterialApp :

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp());
}

C'est tout ! MaterialApp() remplace Directionality et configure automatiquement tout ce dont Flutter a besoin.

Note importante :
Si vous exécutez ce code maintenant, vous verrez un écran noir. C'est normal ! MaterialApp a besoin de savoir quoi afficher. Nous allons voir comment lui donner du contenu dans la prochaine section.

🧪 Exemple simple (MaterialApp + Text)

Pour afficher quelque chose, nous devons donner un contenu à MaterialApp. Pour l'instant, utilisons simplement Text() :

Affichage texte avec MaterialApp et Text() Flutter
Affichage du texte « Bonjour Flutter ! » dans une application Flutter utilisant MaterialApp et Text().
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Text('Bonjour Flutter !'),
  ));
}

Analysons ce code :

  • MaterialApp( : Crée un widget MaterialApp
  • home: Text('Bonjour Flutter !') : Le paramètre home définit ce qui sera affiché à l'écran. Ici, c'est un widget Text().
  • ) : Ferme le widget MaterialApp
Le paramètre home :
Le paramètre home de MaterialApp définit le premier écran (la page d'accueil) de votre application. C'est ce qui sera affiché quand l'application démarre. Nous explorerons ce paramètre en détail dans la prochaine section.
Comparaison avec le code précédent :
Avant, nous avions :
runApp(Directionality(
  textDirection: TextDirection.ltr,
  child: Text('Bonjour Flutter !'),
));
Maintenant, avec MaterialApp, c'est beaucoup plus simple :
runApp(MaterialApp(
  home: Text('Bonjour Flutter !'),
));
Plus besoin de Directionality ! MaterialApp le gère automatiquement.

💡 Points clés à retenir

  • MaterialApp simplifie la création d'applications Flutter
  • Il configure automatiquement le contexte de direction, les thèmes, etc.
  • Le paramètre home définit ce qui est affiché à l'écran
  • MaterialApp remplace Directionality et fait beaucoup plus
Prochaine étape :
Dans la section suivante, nous allons explorer le paramètre home en détail et voir comment l'utiliser avec différents widgets.

2.3.2 – Le paramètre home

Dans la section précédente, nous avons utilisé le paramètre home de MaterialApp. Dans cette section, nous allons comprendre exactement ce qu'est ce paramètre et comment l'utiliser.

🏠 Le premier écran de l'application

Le paramètre home définit le premier écran de votre application. C'est ce qui s'affiche quand l'utilisateur ouvre votre application pour la première fois.

Analogie :
Imaginez une maison. Le paramètre home est comme la porte d'entrée : c'est la première chose que vous voyez quand vous arrivez. De la même manière, home est la première chose que l'utilisateur voit quand il ouvre votre application.

📦 Accepte un widget enfant

Le paramètre home accepte n'importe quel widget. Cela signifie que vous pouvez y mettre ce que vous voulez : du texte, une image, un bouton, ou même une combinaison de plusieurs widgets.

Pour l'instant, nous n'avons vu que le widget Text(). C'est parfait pour commencer !

🧪 Exemple : home = Text()

Voici un exemple simple avec Text() :

Affichage de Text dans MaterialApp Flutter
Affichage du texte « Bienvenue dans mon application ! » via le paramètre home de MaterialApp.
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Text('Bienvenue dans mon application !'),
  ));
}

Dans ce code :

  • MaterialApp crée l'application
  • home: définit le premier écran
  • Text('Bienvenue dans mon application !') est le widget affiché
Important :
Le paramètre home est obligatoire si vous voulez afficher quelque chose. Sans lui, MaterialApp ne saura pas quoi afficher et vous verrez un écran noir.

🎨 Expérimenter avec home

Essayez de modifier le texte dans Text() :

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Text('Ma première application Flutter !'),
  ));
}

Changez le texte entre les guillemets et observez le résultat. C'est votre premier écran personnalisé !

Conseil :
Le paramètre home peut contenir n'importe quel widget. Dans les prochaines sections, nous apprendrons à utiliser d'autres widgets pour créer des interfaces plus riches. Pour l'instant, Text() est parfait pour comprendre le concept.

💡 Points clés à retenir

  • Le paramètre home définit le premier écran de l'application
  • Il accepte n'importe quel widget
  • Il est obligatoire si vous voulez afficher quelque chose
  • Pour l'instant, nous utilisons Text() comme exemple simple
Prochaine étape :
Dans la section suivante, nous allons découvrir le widget Center, qui permet de centrer le contenu à l'écran. Cela rendra votre interface plus agréable visuellement.

2.3.3 – Aligner un widget avec Center

Actuellement, votre texte s'affiche probablement en haut à gauche de l'écran. Pour créer une interface plus agréable, il serait mieux de centrer le texte. C'est là que le widget Center entre en jeu.

🎯 Rôle de Center

Le widget Center centre son contenu au milieu de l'écran (horizontalement et verticalement). C'est un widget très simple mais très utile.

Comment ça marche ?
Center prend un widget enfant et le place au centre de l'espace disponible. Si vous mettez un Text() dans un Center, le texte sera centré à l'écran.

📦 Le paramètre child

Center utilise le paramètre child pour définir ce qu'il doit centrer. C'est le widget qui sera affiché au centre.

Voici la structure de base :

Center(
  child: Text('Mon texte'),
)

Dans cet exemple, Text('Mon texte') est l'enfant de Center. Le texte sera donc centré à l'écran.

Le paramètre child :
Le mot-clé child signifie "enfant" en anglais. C'est un paramètre très courant en Flutter. Beaucoup de widgets utilisent child pour définir leur contenu. Vous verrez ce paramètre partout dans Flutter !

🧪 Exemple : Center + Text

Exemple d'écran Flutter avec Center et Text centrés dans MaterialApp
Le texte « Bonjour Flutter ! » est maintenant centré grâce au widget Center dans une application Flutter utilisant MaterialApp.

Voici comment utiliser Center avec Text() dans votre application :

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Center(
      child: Text('Bonjour Flutter !'),
    ),
  ));
}

Analysons ce code :

  1. MaterialApp crée l'application
  2. home: définit le premier écran
  3. Center( crée un widget qui centre son contenu
  4. child: Text('Bonjour Flutter !') définit le texte à centrer
  5. ) ferme le widget Center
Résultat :
Avec ce code, le texte "Bonjour Flutter !" sera affiché au centre de l'écran, au lieu d'être en haut à gauche. C'est beaucoup plus agréable visuellement !

🌳 Structure de l'arbre de widgets

Voici comment les widgets sont organisés dans cet exemple :

MaterialApp
  └── home: Center
      └── child: Text('Bonjour Flutter !')

MaterialApp contient Center, qui contient Text(). C'est un arbre de widgets simple mais efficace.

Rappel sur l'arbre de widgets :
Comme nous l'avons vu dans le chapitre précédent, les widgets sont organisés en arbre. Ici, MaterialApp est la racine, Center est un enfant, et Text() est un petit-enfant. Chaque widget peut avoir des enfants, qui peuvent avoir leurs propres enfants, etc.

💡 Points clés à retenir

  • Center centre son contenu au milieu de l'écran
  • Il utilise le paramètre child pour définir ce qu'il doit centrer
  • Le paramètre child est très courant en Flutter
  • Center peut contenir n'importe quel widget (pas seulement Text())
Prochaine étape :
Dans la section suivante, nous allons découvrir Scaffold, un widget qui structure votre page avec une apparence plus professionnelle. Il permet d'ajouter des barres, des zones de contenu, etc.

2.3.4 – Structurer une page avec Scaffold

Jusqu'à présent, nous avons affiché du texte centré. C'est bien pour commencer, mais une vraie application a besoin d'une structure plus complète : une barre en haut, une zone de contenu, etc. C'est là que Scaffold entre en jeu.

🏗️ Pourquoi un Scaffold ?

Scaffold est un widget qui fournit une structure de base pour une page Flutter. Il crée automatiquement :

  • Une zone pour le contenu principal (le corps de la page)
  • Un espace pour une barre supérieure (que nous verrons dans la prochaine section)
  • Une gestion automatique des zones sûres (pour éviter que le contenu soit caché par les encoches des téléphones)
Analogie :
Imaginez que vous construisez une maison. Scaffold est comme la charpente : il définit la structure de base (où va le toit, où vont les murs, etc.). Ensuite, vous ajoutez le contenu (les meubles, les décorations) à l'intérieur de cette structure.

📝 Ajout d'un Scaffold minimal

Voici comment utiliser Scaffold de manière minimale :

Affichage de la structure Scaffold dans Flutter
Affichage d'un Scaffold minimal avec un texte centré dans une application Flutter.
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      body: Center(
        child: Text('Bonjour Flutter !'),
      ),
    ),
  ));
}

Analysons ce code :

  • MaterialApp crée l'application
  • home: définit le premier écran
  • Scaffold( crée la structure de la page
  • body: définit le contenu principal de la page
  • Center( centre le contenu
  • child: Text('Bonjour Flutter !') affiche le texte
Le paramètre body :
Le paramètre body de Scaffold définit le contenu principal de la page. C'est là que vous placez tout ce que vous voulez afficher : du texte, des images, des boutons, etc. Pour l'instant, nous y mettons un Center avec un Text().

🛡️ Utilisation recommandée de SafeArea

Sur certains téléphones modernes, il y a des encoches (notches) ou des zones qui peuvent cacher une partie de l'écran. Pour éviter que votre contenu soit caché, Flutter propose le widget SafeArea.

SafeArea garantit que son contenu reste dans les zones sûres de l'écran (zones qui ne seront jamais cachées).

Voici un exemple sans SafeArea : le texte pourrait être masqué si l'appareil possède une encoche ou une barre système en haut.
Le widget Scaffold fournit la structure de la page, mais n'empêche pas le contenu d'être caché par les zones à éviter.

Affichage d'un Scaffold Flutter sans SafeArea
Affichage d'un Scaffold dont le contenu peut être caché par une encoche ou une barre système, car il n'utilise pas SafeArea.
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      body: Text('Bonjour Flutter !'),
    ),
  ));
}

Voici maintenant la version avec SafeArea :

Affichage d'un Scaffold Flutter avec SafeArea
Affichage d'un Scaffold dont le contenu est protégé par SafeArea : le texte n'est jamais masqué, même sur un appareil avec encoche ou bords particuliers.
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      body: SafeArea(
        child: Text('Bonjour Flutter !'),
      ),
    ),
  ));
}
  • Ici, SafeArea enveloppe le widget affiché à l'écran (Text), afin de s'assurer que le contenu reste toujours visible et n'est jamais caché par une encoche ou une barre système.
  • Utiliser SafeArea est très recommandé : cela garantit que l'interface s'adapte à tous les appareils (smartphones avec bords incurvés, encoches, barres d'état, etc.).
Recommandation :
Il est recommandé d'utiliser SafeArea dans le body de Scaffold, surtout pour le contenu principal. Cela garantit que votre application fonctionnera bien sur tous les appareils, même ceux avec des encoches.
Structure complète recommandée :
Voici la structure que nous recommandons pour une page Flutter :
MaterialApp
  └── home: Scaffold
      └── body: SafeArea
          └── child: (votre contenu ici)
Cette structure garantit que votre contenu sera bien affiché sur tous les appareils.

💡 Points clés à retenir

  • Scaffold fournit une structure de base pour une page
  • Le paramètre body définit le contenu principal
  • SafeArea garantit que le contenu reste dans les zones sûres
  • Il est recommandé d'utiliser SafeArea dans le body de Scaffold
Prochaine étape :
Dans la section suivante, nous allons ajouter une barre supérieure avec AppBar. Cela donnera à votre application une apparence encore plus professionnelle.

2.3.5 – Ajouter une barre supérieure avec AppBar

Maintenant que vous avez une page structurée avec Scaffold, ajoutons une barre supérieure. C'est une barre qui apparaît en haut de l'écran et qui peut contenir un titre, des boutons, etc. En Flutter, cette barre s'appelle AppBar.

📊 Rôle d'une AppBar

Une AppBar (Application Bar) est une barre qui apparaît en haut de l'écran. Elle sert généralement à :

Exemple d'application Flutter avec AppBar
Exemples d'AppBar affichées en haut de l'application Flutter
À savoir :
Il existe deux types de barres supérieures (top app bar) dans Flutter :
1. Barre supérieure normale (regular top app bar)
2. Barre d'actions contextuelles (contextual action bar)

La plupart du temps, vous utiliserez la barre supérieure normale, mais sachez que Flutter vous permet aussi d'afficher une barre contextuelle pour des actions spécifiques (comme la sélection d'éléments).
  • Afficher le titre de la page ou de l'application
  • Fournir des boutons d'action (menu, recherche, etc.)
  • Donner une apparence professionnelle à l'application
Où avez-vous vu des AppBar ?
Presque toutes les applications mobiles ont une barre en haut. Par exemple, dans une application de messagerie, la barre en haut affiche souvent le nom de la conversation. Dans une application de navigation, elle affiche la destination. C'est exactement ce qu'est une AppBar en Flutter.

🔧 AppBar dans Scaffold

AppBar s'utilise avec Scaffold. Le paramètre appBar de Scaffold permet d'ajouter une barre supérieure.

Voici comment l'ajouter :

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(),
      body: SafeArea(
        child: Center(
          child: Text('Bonjour Flutter !'),
        ),
      ),
    ),
  ));
}

Ici, nous avons ajouté appBar: AppBar() dans le Scaffold. Cela crée une barre supérieure vide (sans titre pour l'instant).

Résultat :
Avec ce code, vous verrez une barre bleue en haut de l'écran (c'est la couleur par défaut de AppBar). Le texte "Bonjour Flutter !" sera toujours centré en dessous.

📝 Le paramètre title

Pour ajouter un titre à la barre, utilisez le paramètre title :

Première AppBar Flutter avec titre
La première AppBar s’affiche : une barre avec le titre "Mon Application" en haut de l’écran.
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(
        title: Text('Mon Application'),
      ),
      body: SafeArea(
        child: Center(
          child: Text('Bonjour Flutter !'),
        ),
      ),
    ),
  ));
}

Analysons ce code :

  • appBar: AppBar( crée une barre supérieure
  • title: Text('Mon Application') définit le titre affiché dans la barre
  • ) ferme le widget AppBar
Le paramètre title :
Le paramètre title de AppBar accepte un widget. Ici, nous utilisons Text() pour afficher du texte, mais vous pourriez utiliser d'autres widgets plus tard. les autres composants de l'AppBar
Exemple de barre supérieure avec AppBar dans Flutter
Structure d’une AppBar Flutter :
L’AppBar peut être personnalisée : couleur, hauteur, icônes, etc.
  • leading : le widget à gauche (ex : icône de menu, bouton retour)
  • title : le titre centré de la barre
  • actions : une liste de widgets à droite (ex : boutons, menus, icônes d’action)
  • bottom : une barre en bas de l’AppBar (généralement pour des onglets, TabBar)

🌳 Structure complète

Voici la structure complète de l'arbre de widgets avec AppBar :

MaterialApp
  └── home: Scaffold
      ├── appBar: AppBar
      │   └── title: Text('Mon Application')
      └── body: SafeArea
          └── child: Center
              └── child: Text('Bonjour Flutter !')

C'est un arbre plus complexe, mais chaque widget a un rôle clair :

  • MaterialApp : L'application principale
  • Scaffold : La structure de la page
  • AppBar : La barre supérieure avec le titre
  • SafeArea : Garantit que le contenu reste visible
  • Center : Centre le contenu
  • Text() : Affiche le texte

💡 Points clés à retenir

  • AppBar crée une barre supérieure pour votre page
  • Elle s'utilise avec le paramètre appBar de Scaffold
  • Le paramètre title définit le titre affiché dans la barre
  • AppBar donne une apparence professionnelle à votre application
Prochaine étape :
Dans la dernière section de ce chapitre, nous allons découvrir le Hot Reload, une fonctionnalité magique de Flutter qui permet de voir vos modifications instantanément sans redémarrer l'application.

2.3.6 – Hot Reload avec StatelessWidget

Jusqu'à présent, nous avons écrit tout notre code directement dans la fonction main(). C'est bien pour apprendre, mais pour utiliser le Hot Reload efficacement et créer des applications plus complexes, nous devons organiser notre code différemment. C'est là que StatelessWidget entre en jeu.

⚡ Comprendre le Hot Reload

Le Hot Reload est une fonctionnalité de Flutter qui permet de voir vos modifications de code instantanément dans l'application, sans avoir à redémarrer complètement l'application.

Comment ça marche ?
Quand vous modifiez votre code et sauvegardez (ou appuyez sur le bouton Hot Reload), Flutter :
  1. Détecte les changements dans votre code
  2. Met à jour uniquement les parties modifiées
  3. Affiche les changements instantanément dans l'application
C'est très rapide (généralement moins d'une seconde) !

👀 Voir les modifications instantanément

Pour tester le Hot Reload, essayez ceci :

  1. Lancez votre application (bouton "Run" dans votre éditeur)
  2. Modifiez le texte dans Text(), par exemple changez "Bonjour Flutter !" en "Hello Flutter !"
  3. Sauvegardez le fichier (Ctrl+S) ou cliquez sur le bouton Hot Reload (⚡) dans votre éditeur
  4. Observez : le texte change instantanément dans l'application !
Raccourcis clavier :
  • VS Code : Ctrl+S (sauvegarder déclenche souvent le Hot Reload automatiquement) ou Ctrl+Shift+F5
  • Android Studio : Ctrl+\ (ou Cmd+\ sur Mac)
Le Hot Reload est généralement déclenché automatiquement quand vous sauvegardez, selon la configuration de votre éditeur.
Flutter ne peut pas effectuer de Hot Reload sur le code se trouvant directement dans la fonction main() ou sur les widgets écrits inline (c’est-à-dire passés directement à runApp() sans classe dédiée). Si vous voulez profiter du Hot Reload pour vos modifications, organisez votre interface dans des classes qui héritent de StatelessWidget ou StatefulWidget.

🏗️ Utiliser StatelessWidget

Pour que le Hot Reload fonctionne de manière optimale, il est recommandé d'organiser votre code avec des widgets personnalisés. StatelessWidget est la base pour créer vos propres widgets.

Voici comment transformer votre code pour utiliser StatelessWidget :

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: MaPage(),
  ));
}

class MaPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Mon Application'),
      ),
      body: SafeArea(
        child: Center(
          child: Text('Bonjour Flutter !'),
        ),
      ),
    );
  }
}

Analysons ce code :

  • class MaPage extends StatelessWidget : Crée une classe qui représente votre page. Elle hérite de StatelessWidget.
  • @override : Indique que nous redéfinissons une méthode de la classe parente.
  • Widget build(BuildContext context) : Cette méthode est appelée par Flutter pour construire l'interface. Elle doit retourner un widget.
  • return Scaffold(...) : Retourne le widget qui sera affiché (notre structure complète).
  • home: MaPage() : Utilise notre widget personnalisé comme premier écran.

Deuxième façon recommandée

Il existe une autre façon d'organiser votre code : vous pouvez mettre MaterialApp directement dans la méthode build() de votre widget personnalisé :

import 'package:flutter/material.dart';

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

class MaPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Mon Application'),
        ),
        body: const SafeArea(
          child: Center(
            child: Text('Bonjour Flutter !'),
          ),
        ),
      ),
    );
  }
}

Dans cette version :

  • runApp(const MaPage()) appelle directement votre widget personnalisé avec le mot-clé const
  • MaterialApp est maintenant dans la méthode build() au lieu d'être dans main()
  • debugShowCheckedModeBanner: false masque la bannière de débogage en haut à droite
  • Les widgets sont marqués avec const pour optimiser les performances
Exercice pratique :
  1. Dans le code ci-dessus, modifiez le texte affiché dans le widget Text('Bonjour Flutter !') par un message personnalisé de votre choix (par exemple Text('Je découvre Flutter 🚀')).
  2. Changez également le titre affiché dans la barre supérieure (AppBar) en modifiant la valeur du widget Text passé au paramètre title de AppBar (par exemple title: Text('Mon nouveau titre')).
  3. Enregistrez vos modifications (Ctrl+S ou Cmd+S), ou cliquez sur le bouton Save and Hot Reload [⚡].
  4. Observez le résultat sur votre application : Flutter applique les changements instantanément grâce au Hot Reload, sans besoin de redémarrer l'application !

Remarque : Le Hot Reload permet de voir immédiatement le résultat lorsque vous modifiez l'interface de votre app. Essayez plusieurs textes différents pour constater la rapidité de la mise à jour !

Quelle façon choisir ?
Les deux façons fonctionnent parfaitement pour le Hot Reload. La première façon (avec MaterialApp dans main()) est plus simple pour débuter. La deuxième façon (avec MaterialApp dans build()) est plus flexible et permet de mieux organiser votre code quand votre application grandit. Les deux approches sont valides. Choisissez celle qui vous semble la plus claire.
À propos de const :
  • const indique que le widget est une constante (ne change jamais). Cela améliore les performances.
  • debugShowCheckedModeBanner: false masque la petite bannière "DEBUG" qui apparaît en haut à droite en mode développement.
Pour l'instant, ne vous inquiétez pas trop de ces détails. L'important est de comprendre la structure générale. Nous explorerons ces concepts plus en détail plus tard.
Qu'est-ce que StatelessWidget ?
StatelessWidget est un widget qui ne change pas après sa création. C'est parfait pour afficher du contenu statique (qui ne bouge pas). Plus tard, nous découvrirons StatefulWidget pour les widgets qui peuvent changer.
Important :
Ne vous inquiétez pas si cette syntaxe vous semble complexe pour l'instant. C'est normal ! L'important est de comprendre que :
  • Nous créons une classe MaPage qui représente notre page
  • Cette classe a une méthode build() qui retourne ce qui doit être affiché
  • Nous utilisons MaPage() dans home:
Nous explorerons les classes et l'héritage en détail plus tard. Pour l'instant, copiez cette structure et modifiez le contenu.

🛠️ Le constructeur de MaPage avec super.key

Depuis les dernières versions de Flutter, il est recommandé de passer super.key dans le constructeur du widget, surtout lorsqu’on crée un widget StatelessWidget ou StatefulWidget. Cela permet d’associer à chaque widget une clé (« key ») qui aide Flutter à gérer l’arbre des widgets de façon plus efficace lors des reconstructions.

class MaPage extends StatelessWidget {
  const MaPage({super.key}); // 👈 Passage de la clé au parent

  @override
  Widget build(BuildContext context) {
    // ... reste du code
  }
}
Pourquoi ajouter super.key ?
  • super.key transmet la clé reçue par le constructeur de MaPage au constructeur de la classe parente (StatelessWidget).
  • Les « Key » sont utiles lorsque vous avez besoin d’identifier de manière unique un widget ou lorsque vous manipulez des listes de widgets dynamiques.
  • Il est désormais conseillé de systématiquement inclure {super.key} dans les widgets personnalisés même si, au début, vous n’en avez pas besoin — cela rendra votre code prêt pour les cas évolués.

🔄 Différence entre Hot Reload et Hot Restart

Il existe deux façons de mettre à jour votre application :

Hot Reload (Rechargement à chaud)

  • Vitesse : Très rapide (moins d'une seconde)
  • Ce qu'il fait : Met à jour uniquement le code modifié, préserve l'état de l'application
  • Quand l'utiliser : Pour modifier l'interface, changer du texte, ajuster des styles
  • Limitation : Ne fonctionne pas pour certains changements (modification de la fonction main(), ajout de nouvelles classes, etc.)

Hot Restart (Redémarrage à chaud)

  • Vitesse : Plus lent que Hot Reload (quelques secondes)
  • Ce qu'il fait : Redémarre l'application complètement, réinitialise tout l'état
  • Quand l'utiliser : Quand Hot Reload ne fonctionne pas, ou quand vous voulez réinitialiser l'état de l'application
  • Avantage : Fonctionne pour tous les types de modifications
Comment utiliser Hot Restart :
  • VS Code : Ctrl+Shift+F5
  • Android Studio : Ctrl+Shift+\ (ou Cmd+Shift+\ sur Mac)
Ou utilisez le bouton Hot Restart ⚡ dans la barre d'outils de votre éditeur.
Quand utiliser quoi ?
  • Hot Reload : Utilisez-le en priorité. C'est rapide et préserve l'état de votre application.
  • Hot Restart : Utilisez-le seulement si Hot Reload ne fonctionne pas ou si vous voulez réinitialiser l'état.
  • Redémarrage complet : Utilisez-le seulement si Hot Restart ne fonctionne pas (très rare).

💡 Points clés à retenir

  • Le Hot Reload permet de voir les modifications instantanément
  • StatelessWidget permet de créer des widgets personnalisés
  • La méthode build() retourne ce qui doit être affiché
  • Hot Reload est rapide et préserve l'état
  • Hot Restart redémarre complètement l'application
Félicitations ! 🎉
Vous avez terminé ce chapitre ! Vous savez maintenant :
  • ✅ Utiliser MaterialApp pour créer une application
  • ✅ Structurer une page avec Scaffold
  • ✅ Centrer du contenu avec Center
  • ✅ Ajouter une barre supérieure avec AppBar
  • ✅ Utiliser SafeArea pour protéger le contenu
  • ✅ Créer des widgets personnalisés avec StatelessWidget
  • ✅ Utiliser le Hot Reload pour développer rapidement
Dans le prochain chapitre, nous allons découvrir comment organiser plusieurs widgets ensemble pour créer des interfaces plus riches. Continuez comme ça ! 💪

Vous avez appris à construire progressivement une interface Flutter :
  • MaterialApp simplifie la création d'applications
  • ✅ Le paramètre home définit le premier écran
  • Center centre le contenu à l'écran
  • Scaffold structure la page
  • SafeArea protège le contenu des zones dangereuses
  • AppBar ajoute une barre supérieure professionnelle
  • StatelessWidget permet de créer des widgets personnalisés
  • ✅ Le Hot Reload accélère le développement
Prochaine étape : Dans le chapitre 2.4, nous allons découvrir comment organiser plusieurs widgets ensemble avec Container, Column, Row et Card pour créer des interfaces plus riches. À bientôt ! 🚀