AppBar est un widget de panneau supérieur d’écran dans Flutter qui implémente le composant Material Design avec un titre, des actions, un bouton de navigation et des onglets. Contrairement à un panneau personnalisé avec Row ou Stack, AppBar fournit une architecture prête avec une hauteur correcte de 56dp (48dp à l’état replié) et une gestion automatique de SafeArea. Selon Flutter API Reference (2026), AppBar prend en charge l’animation au défilement via SliverAppBar et l’intégration avec Material 3 via le paramètre forceMaterialTransparency. Dans une application mobile typique, AppBar agit comme un hub de navigation et d’informations, combinant le titre de la page, les actions système et le changement de sections.
Points clés
AppBar est un composant Material standard de panneau supérieur qui apparaît en haut d’un Scaffold. Il contient le titre de l’écran, un bouton de navigation (généralement une icône « hamburger » ou une flèche « Retour ») et des actions — des icônes qui ouvrent la recherche, les paramètres ou d’autres fonctions. AppBar s’adapte automatiquement à la plateforme : sous Android, il utilise l’ombre inférieure Material standard, sous iOS — un design plus plat avec transparence.
AppBar implémente l’interface PreferredSizeWidget, ce qui signifie que sa hauteur est fixe et connue avant la construction. Par défaut, la hauteur d’AppBar est de 56dp sous Android et 44dp sous iOS en orientation portrait, en tenant compte de SafeArea en haut. Cette fonctionnalité permet à Scaffold de calculer à l’avance l’espace disponible pour le body, évitant ainsi une recomposition lors du rendu.
Selon Flutter Material Library Guide (2026), AppBar a connu plusieurs itérations : dans Flutter 1.x, c’était un simple conteneur avec du texte, dans Flutter 2.x, il a obtenu la prise en charge de Material 3 et flexibleSpace, et dans Flutter 3.x — l’intégration avec System UI (couleur de la barre d’état, transparence). L’AppBar moderne prend en charge Dynamic Color de Material You sur les appareils Android 12+.
AppBar fournit un ensemble de paramètres qui contrôlent chaque partie du panneau supérieur. Comprendre ces propriétés permet de personnaliser le panneau de manière flexible pour toute exigence de conception sans créer de solutions personnalisées.
| Propriété | Type | Description |
|---|---|---|
| title | Widget? | Titre principal du panneau, généralement Text avec le nom de l’écran |
| leading | Widget? | Widget à gauche du titre (bouton « Retour » ou icône de menu) |
| actions | List<Widget>? | Liste des widgets d’action à droite (IconButton, PopupMenuButton) |
| bottom | PreferredSizeWidget? | Zone inférieure pour TabBar ou widget personnalisé |
| flexibleSpace | Widget? | Widget d’arrière-plan qui s’anime au défilement dans SliverAppBar |
| backgroundColor | Color? | Couleur de fond du panneau, remplaçant la couleur du thème |
| elevation | double | Ombre sous le panneau, créant un effet de surélévation par rapport au contenu |
| centerTitle | bool? | Centrage du titre (true — comportement Material 3, false — style Android) |
La propriété title accepte n’importe quel widget, mais le plus courant est d’utiliser Text avec une configuration de style via TextStyle. Pour les titres longs, il est recommandé d’envelopper title dans Flexible afin que le texte soit correctement tronqué lorsque l’espace est limité. La propriété leading est automatiquement remplacée par BackButton lors de la navigation vers un écran imbriqué via Navigator.push, si elle n’est pas définie explicitement.
La liste actions contient des widgets alignés sur le bord droit d’AppBar. Chaque élément ne doit pas dépasser 48dp de largeur (standard Material Design). Pour regrouper les actions, utilisez PopupMenuButton — cela masque les options moins importantes dans un menu déroulant et respecte les recommandations Material concernant la densité de l’interface.
AppBar prend en charge une personnalisation approfondie via les propriétés de couleur, d’ombre et de remplissage. Le style de base est hérité du thème de l’application, mais chaque propriété peut être remplacée individuellement. Examinons les principaux scénarios de configuration.
La couleur de fond d’AppBar est définie via backgroundColor. Si elle n’est pas spécifiée, appBarTheme de ThemeData est utilisé. Dans Material 3, la couleur d’AppBar est automatiquement calculée à partir de ColorScheme.primary, mais peut être remplacée pour un écran spécifique. Pour une AppBar transparente (souvent utilisée dans les profils), définissez backgroundColor : Colors.transparent avec elevation : 0.
La propriété elevation contrôle l’ombre sous AppBar. La valeur 0 supprime l’ombre, créant un effet de panneau « plat », pertinent pour Material 3. La valeur 4 donne l’ombre standard Material Design. Pour un contrôle personnalisé de l’ombre, utilisez shadowColor — la couleur d’ombre qui sépare visuellement le panneau du contenu.
Pour contrôler la couleur du texte dans AppBar, utilisez foregroundColor. Cette propriété affecte la couleur du titre, des icônes et du texte dans actions. Lors du changement de backgroundColor, un foregroundColor contrastant est automatiquement sélectionné, mais il peut être imposé pour des designs non standard.
SliverAppBar est une extension d’AppBar pour une utilisation dans CustomScrollView qui prend en charge l’animation au défilement : repliement, effet parallaxe et fixation. Contrairement à une AppBar standard, SliverAppBar est un widget sliver et peut changer de taille dynamiquement en fonction de la position de défilement.
Les modes principaux de SliverAppBar sont déterminés par une combinaison des propriétés pinned, floating et snap. En mode pinned, le panneau reste toujours visible en haut de l’écran. En mode floating, il apparaît lors du défilement arrière. La combinaison floating + snap crée un comportement de panneau « collant » qui apparaît au moindre défilement vers le haut, souvent utilisé dans les fils d’actualité.
Selon Flutter API SliverAppBar (2026), pour utiliser SliverAppBar, il faut remplacer un ListView ou Column standard par CustomScrollView contenant des widgets sliver. Scaffold continue de fonctionner correctement, mais la propriété appBar de Scaffold doit être null — SliverAppBar est placé dans CustomScrollView comme premier sliver.
Voyons un exemple d’AppBar avec recherche, menu déroulant et TabBar. Ce code illustre une configuration typique du panneau supérieur dans une application de production Flutter.
Scaffold(
appBar: AppBar(
title: const Text('Catalogue'),
centerTitle: true,
leading: IconButton(
icon: const Icon(Icons.menu),
onPressed: () => Scaffold.of(context).openDrawer(),
),
actions: [
IconButton(
icon: const Icon(Icons.search),
onPressed: () => showSearch(context: context, delegate: ProductSearch()),
),
PopupMenuButton<String>(
onSelected: (String value) {},
itemBuilder: (context) => [
const PopupMenuItem(value: 'settings', child: Text('Paramètres')),
const PopupMenuItem(value: 'about', child: Text('À propos de l’application')),
],
),
],
bottom: const TabBar(
tabs: [
Tab(text: 'All'),
Tab(text: 'New'),
Tab(text: 'Popular'),
],
),
),
body: const TabBarView(
children: [
AllProductsPage(),
NewProductsPage(),
PopularProductsPage(),
],
),
)
Dans l’exemple, AppBar contient un titre centré, un bouton d’ouverture de Drawer à gauche, une icône de recherche et un menu déroulant à droite. TabBar en bas permet de basculer entre les catégories de produits. Cette configuration couvre la plupart des scénarios d’applications mobiles : navigation, recherche, options supplémentaires et changement de sections — le tout dans un seul panneau supérieur.
Foire aux questions
La hauteur d’AppBar est fixe (56dp) et ne peut pas être modifiée directement. Pour une hauteur personnalisée, utilisez PreferredSize en enveloppant un widget personnalisé de la hauteur souhaitée. Alternativement, utilisez SliverAppBar avec collapsedHeight pour une gestion flexible de la taille à l’état replié sans perdre les fonctionnalités du panneau standard.
Définissez la propriété elevation : 0 dans le constructeur d’AppBar. Cela supprime l’ombre et rend le panneau visuellement plat, ce qui correspond au style Material 3. Pour un contrôle total, utilisez shadowColor : Colors.transparent pour remplacer la couleur d’ombre sans modifier elevation, si vous devez conserver la coordonnée z.
AppBar est un panneau statique de hauteur fixe, placé dans Scaffold.appBar. SliverAppBar est une version dynamique utilisée dans CustomScrollView qui peut se replier, se fixer et s’animer au défilement. SliverAppBar fournit les propriétés collapsedHeight, expandedHeight, pinned et floating pour une gestion flexible du comportement de défilement.
Ajoutez un IconButton avec une icône de recherche à la liste des actions. Lors de l’appui, vous pouvez appeler showSearch avec un SearchDelegate personnalisé qui ouvrira l’écran de recherche avec une animation automatique. Alternativement, remplacez le title par un TextField, transformant AppBar en barre de recherche intégrée, pratique pour les catalogues et les listes.
Par défaut, centerTitle est null et le comportement dépend de la plateforme : sous Android, le titre est aligné à gauche, sous iOS — centré. Définissez explicitement centerTitle : true pour forcer le centrage sur les deux plateformes. Si le titre n’est pas centré à cause de leading, vérifiez que leading n’est pas null — sa présence décale le titre vers la droite.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi