AppBar è un widget del pannello superiore dello schermo in Flutter che implementa il componente Material Design con titolo, azioni, pulsante di navigazione e schede. A differenza di un pannello personalizzato con Row o Stack, AppBar fornisce un’architettura pronta con altezza corretta di 56dp (48dp in stato compresso) e gestione automatica di SafeArea. Secondo Flutter API Reference (2026), AppBar supporta l’animazione durante lo scorrimento tramite SliverAppBar e l’integrazione con Material 3 tramite il parametro forceMaterialTransparency. In un’applicazione mobile tipica, AppBar funge da hub di navigazione e informazione, combinando il titolo della pagina, le azioni di sistema e il cambio tra sezioni.
Punti chiave
AppBar è un componente Material standard del pannello superiore che appare nella parte superiore di uno Scaffold. Contiene il titolo dello schermo, un pulsante di navigazione (di solito un’icona “hamburger” o una freccia “Indietro”) e azioni — icone che aprono ricerca, impostazioni o altre funzioni. AppBar si adatta automaticamente alla piattaforma: su Android utilizza l’ombra inferiore Material standard, su iOS — un design più piatto con trasparenza.
AppBar implementa l’interfaccia PreferredSizeWidget, il che significa che la sua altezza è fissa e nota prima della costruzione. Per impostazione predefinita, l’altezza di AppBar è di 56dp su Android e 44dp su iOS in orientamento ritratto, tenendo conto di SafeArea nella parte superiore. Questa funzionalità consente a Scaffold di calcolare in anticipo lo spazio disponibile per il body, evitando la ricomposizione durante il rendering.
Secondo Flutter Material Library Guide (2026), AppBar ha attraversato diverse iterazioni: in Flutter 1.x era un semplice contenitore con testo, in Flutter 2.x ha ottenuto il supporto per Material 3 e flexibleSpace, e in Flutter 3.x — l’integrazione con System UI (colore della barra di stato, trasparenza). L’AppBar moderna supporta Dynamic Color di Material You sui dispositivi Android 12+.
AppBar fornisce un insieme di parametri che controllano ogni parte del pannello superiore. Comprendere queste proprietà consente di personalizzare il pannello in modo flessibile per qualsiasi requisito di progettazione senza creare soluzioni personalizzate.
| Proprietà | Tipo | Descrizione |
|---|---|---|
| title | Widget? | Titolo principale del pannello, di solito Text con il nome dello schermo |
| leading | Widget? | Widget a sinistra del titolo (pulsante “Indietro” o icona del menu) |
| actions | List<Widget>? | Elenco di widget azione a destra (IconButton, PopupMenuButton) |
| bottom | PreferredSizeWidget? | Area inferiore per TabBar o widget personalizzato |
| flexibleSpace | Widget? | Widget di sfondo che si anima durante lo scorrimento in SliverAppBar |
| backgroundColor | Color? | Colore di sfondo del pannello, sovrascrive il colore del tema |
| elevation | double | Ombra sotto il pannello, crea un effetto di sollevamento sopra il contenuto |
| centerTitle | bool? | Centratura del titolo (true — comportamento Material 3, false — stile Android) |
La proprietà title accetta qualsiasi widget, ma il più comune è l’uso di Text con configurazione di stile tramite TextStyle. Per titoli lunghi, si consiglia di avvolgere title in Flexible in modo che il testo venga troncato correttamente quando lo spazio è limitato. La proprietà leading viene automaticamente sostituita da BackButton durante la navigazione verso uno schermo annidato tramite Navigator.push, se non impostata esplicitamente.
L’elenco actions contiene widget allineati al bordo destro di AppBar. Ogni elemento non deve essere più largo di 48dp (standard Material Design). Per raggruppare le azioni, utilizzare PopupMenuButton — questo nasconde le opzioni meno importanti in un menu a discesa e rispetta le raccomandazioni Material sulla densità dell’interfaccia.
AppBar supporta una personalizzazione approfondita tramite proprietà di colore, ombra e riempimento. Lo stile di base viene ereditato dal tema dell’applicazione, ma ogni proprietà può essere sovrascritta individualmente. Esaminiamo i principali scenari di configurazione.
Il colore di sfondo di AppBar viene impostato tramite backgroundColor. Se non specificato, viene utilizzato appBarTheme da ThemeData. In Material 3, il colore di AppBar viene calcolato automaticamente da ColorScheme.primary, ma può essere sovrascritto per uno schermo specifico. Per un’AppBar trasparente (spesso utilizzata nei profili), impostare backgroundColor: Colors.transparent con elevation: 0.
La proprietà elevation controlla l’ombra sotto AppBar. Il valore 0 rimuove l’ombra, creando un effetto di pannello “piatto”, pertinente per Material 3. Il valore 4 fornisce l’ombra standard di Material Design. Per un controllo personalizzato dell’ombra, utilizzare shadowColor — il colore dell’ombra che separa visivamente il pannello dal contenuto.
Per controllare il colore del testo in AppBar, utilizzare foregroundColor. Questa proprietà influisce sul colore del titolo, delle icone e del testo in actions. Quando si cambia backgroundColor, viene automaticamente selezionato un foregroundColor contrastante, ma può essere forzato per design non standard.
SliverAppBar è un’estensione di AppBar per l’uso all’interno di CustomScrollView che supporta l’animazione durante lo scorrimento: compressione, effetto parallasse e fissaggio. A differenza di un’AppBar standard, SliverAppBar è un widget sliver e può cambiare dimensione dinamicamente in base alla posizione di scorrimento.
Le modalità principali di SliverAppBar sono determinate da una combinazione delle proprietà pinned, floating e snap. In modalità pinned, il pannello rimane sempre visibile nella parte superiore dello schermo. In modalità floating, appare durante lo scorrimento all’indietro. La combinazione floating + snap crea un comportamento di pannello “appiccicoso” che appare al minimo scorrimento verso l’alto, spesso utilizzato nei feed di notizie.
Secondo Flutter API SliverAppBar (2026), per utilizzare SliverAppBar è necessario sostituire un normale ListView o Column con CustomScrollView contenente widget sliver. Scaffold continua a funzionare correttamente, ma la proprietà appBar di Scaffold deve essere null — SliverAppBar viene posizionato all’interno di CustomScrollView come primo sliver.
Vediamo un esempio di AppBar con ricerca, menu a discesa e TabBar. Questo codice mostra una configurazione tipica del pannello superiore in un’applicazione di produzione in Flutter.
Scaffold(
appBar: AppBar(
title: const Text('Catalogo'),
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('Impostazioni')),
const PopupMenuItem(value: 'about', child: Text('Informazioni sull’App')),
],
),
],
bottom: const TabBar(
tabs: [
Tab(text: 'All'),
Tab(text: 'New'),
Tab(text: 'Popular'),
],
),
),
body: const TabBarView(
children: [
AllProductsPage(),
NewProductsPage(),
PopularProductsPage(),
],
),
)
Nell’esempio, AppBar contiene un titolo centrato, un pulsante di apertura Drawer a sinistra, un’icona di ricerca e un menu a discesa a destra. TabBar in basso consente di passare da una categoria di prodotti all’altra. Questa configurazione copre la maggior parte degli scenari delle applicazioni mobili: navigazione, ricerca, opzioni aggiuntive e cambio di sezioni — tutto in un unico pannello superiore.
Domande frequenti
L’altezza di AppBar è fissa (56dp) e non può essere modificata direttamente. Per un’altezza personalizzata, utilizzare PreferredSize avvolgendo un widget personalizzato dell’altezza desiderata. In alternativa, utilizzare SliverAppBar con collapsedHeight per una gestione flessibile delle dimensioni in stato compresso senza perdere la funzionalità del pannello standard.
Impostare la proprietà elevation: 0 nel costruttore di AppBar. Questo rimuove l’ombra e rende il pannello visivamente piatto, in linea con lo stile Material 3. Per un controllo completo, utilizzare shadowColor: Colors.transparent per sovrascrivere il colore dell’ombra senza modificare elevation, se è necessario mantenere la coordinata z.
AppBar è un pannello statico di altezza fissa, posizionato in Scaffold.appBar. SliverAppBar è una versione dinamica utilizzata all’interno di CustomScrollView che può comprimersi, fissarsi e animarsi durante lo scorrimento. SliverAppBar fornisce le proprietà collapsedHeight, expandedHeight, pinned e floating per una gestione flessibile del comportamento di scorrimento.
Aggiungere un IconButton con icona di ricerca all’elenco actions. Alla pressione, è possibile chiamare showSearch con un SearchDelegate personalizzato che aprirà lo schermo di ricerca con animazione automatica. In alternativa, sostituire il title con un TextField, trasformando AppBar in una barra di ricerca inline, comoda per cataloghi ed elenchi.
Per impostazione predefinita centerTitle è null e il comportamento dipende dalla piattaforma: su Android il titolo è allineato a sinistra, su iOS — centrato. Impostare esplicitamente centerTitle: true per forzare la centratura su entrambe le piattaforme. Se il titolo non viene centrato a causa di leading, verificare che leading non sia null — la sua presenza sposta il titolo verso destra.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche