AppBar — este un widget al panoului superior al ecranului în Flutter, care implementează componenta Material Design cu titlu, acțiuni, buton de navigare și file. Spre deosebire de un panou personalizat pe Row sau Stack, AppBar oferă o arhitectură gata făcută cu înălțimea corectă de 56dp (48dp în stare restrânsă) și procesarea automată a SafeArea. Conform Flutter API Reference (2026), AppBar suportă animație la derulare prin SliverAppBar și integrare cu Material 3 prin parametrul forceMaterialTransparency. Într-o aplicație mobilă tipică, AppBar îndeplinește rolul unui hub de navigare și informațional, combinând titlul paginii, acțiunile sistemului și comutarea între secțiuni.
Puncte principale
AppBar — este o componentă Material standard a panoului superior care se afișează în partea de sus a Scaffold. Conține titlul ecranului, butonul de navigare (de obicei iconița „hamburger“ sau săgeata „Înapoi“) și acțiuni — iconițe care deschid căutarea, setările sau alte funcții. AppBar se adaptează automat la platformă: pe Android se folosește Material bottom-shadow standard, pe iOS — un design mai plat cu transparență.
AppBar implementează interfața PreferredSizeWidget, ceea ce înseamnă că înălțimea sa este fixă și cunoscută înainte de construire. În mod implicit, înălțimea AppBar este de 56dp pe Android și 44dp pe iOS în orientare portret, ținând cont de SafeArea deasupra. Această caracteristică permite Scaffold să calculeze în avans spațiul disponibil pentru body, evitând recompunerea în timpul redării.
Conform Flutter Material Library Guide (2026), AppBar a trecut prin mai multe iterații: în Flutter 1.x era un container simplu cu text, în Flutter 2.x a primit suport pentru Material 3 și flexibleSpace, iar în Flutter 3.x — integrare cu System UI (culoarea barei de stare, transparență). AppBar modern suportă Dynamic Color de la Material You pe dispozitive Android 12+.
AppBar oferă un set de parametri care controlează fiecare parte a panoului superior. Înțelegerea acestor proprietăți permite configurarea flexibilă a panoului pentru orice cerințe de design fără a crea soluții personalizate.
| Proprietate | Tip | Descriere |
|---|---|---|
| title | Widget? | Titlul principal al panoului, de obicei Text cu numele ecranului |
| leading | Widget? | Widgetul din stânga titlului (butonul „Înapoi“ sau iconița de meniu) |
| actions | List<Widget>? | Lista widget-urilor de acțiuni din dreapta (IconButton, PopupMenuButton) |
| bottom | PreferredSizeWidget? | Zona inferioară pentru TabBar sau widget personalizat |
| flexibleSpace | Widget? | Widgetul de fundal animat la derulare în SliverAppBar |
| backgroundColor | Color? | Culoarea de fundal a panoului, care suprascrie culoarea temei |
| elevation | double | Umbra sub panou, care creează un efect de ridicare deasupra conținutului |
| centerTitle | bool? | Centrarea titlului (true — comportament Material 3, false — stil Android) |
Proprietatea title acceptă orice widget, dar cel mai des se folosește Text cu configurarea stilului prin TextStyle. Pentru titluri lungi, se recomandă înfășurarea title în Flexible pentru ca textul să se taie corect la lipsa de spațiu. Proprietatea leading este înlocuită automat cu BackButton la trecerea pe un ecran imbricat prin Navigator.push, dacă nu este setată explicit.
Lista actions conține widget-uri aliniate la marginea dreaptă a AppBar. Fiecare element nu trebuie să fie mai lat de 48dp (standard Material Design). Pentru gruparea acțiunilor, folosiți PopupMenuButton — acesta ascunde opțiunile mai puțin importante într-un meniu derulant și respectă recomandările Material privind densitatea interfeței.
AppBar suportă personalizare profundă prin proprietățile de culoare, umbră și margini. Aspectul de bază este moștenit din tema aplicației, dar fiecare proprietate poate fi suprascrisă individual. Să analizăm principalele scenarii de configurare.
Culoarea de fundal a AppBar se setează prin backgroundColor. Dacă nu este specificată, se folosește appBarTheme din ThemeData. În Material 3, culoarea AppBar se calculează automat din ColorScheme.primary, dar poate fi suprascrisă pentru un anumit ecran. Pentru un AppBar transparent (des folosit în profiluri), setați backgroundColor: Colors.transparent cu elevation: 0.
Proprietatea elevation controlează umbra sub AppBar. Valoarea 0 elimină umbra, creând un efect de panou „plat“, ceea ce este relevant pentru Material 3. Valoarea 4 oferă umbra standard Material Design. Pentru control personalizat al umbrei, folosiți shadowColor — culoarea umbrei care separă vizual panoul de conținut.
Pentru controlul culorii textului în AppBar, folosiți foregroundColor. Această proprietate afectează culoarea titlului, iconițelor și textului în actions. La schimbarea backgroundColor, se selectează automat un foregroundColor contrastant, dar poate fi setat forțat pentru designuri non-standard.
SliverAppBar — este o extensie a AppBar pentru utilizare în CustomScrollView, care suportă animație la derulare: restrângere (collapsing), efect de paralaxă și fixare (pinned). Spre deosebire de AppBar standard, SliverAppBar este un widget sliver și poate schimba dimensiunea dinamic în funcție de poziția de derulare.
Modurile principale ale SliverAppBar sunt determinate de combinația proprietăților pinned, floating și snap. În modul pinned, panoul rămâne întotdeauna vizibil în partea de sus a ecranului. În modul floating, apare la derularea înapoi. Combinația floating + snap creează un comportament de panou „lipicios“ care apare la cea mai mică derulare în sus, des folosit în feed-uri de știri.
Conform Flutter API SliverAppBar (2026), pentru a folosi SliverAppBar, trebuie să înlocuiți ListView sau Column obișnuit cu CustomScrollView cu widget-uri sliver. Scaffold continuă să funcționeze corect, dar proprietatea appBar a Scaffold trebuie să fie null — SliverAppBar se plasează în CustomScrollView ca primul sliver.
Să analizăm un exemplu de AppBar cu căutare, meniu derulant și TabBar. Acest cod demonstrează o configurație tipică a panoului superior într-o aplicație Flutter de producție.
Scaffold(
appBar: AppBar(
title: const Text('Catalog'),
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('Setări')),
const PopupMenuItem(value: 'about', child: Text('Despre aplicație')),
],
),
],
bottom: const TabBar(
tabs: [
Tab(text: 'All'),
Tab(text: 'New'),
Tab(text: 'Popular'),
],
),
),
body: const TabBarView(
children: [
AllProductsPage(),
NewProductsPage(),
PopularProductsPage(),
],
),
)
În exemplu, AppBar conține un titlu centrat, un buton de deschidere a Drawer în stânga, o iconiță de căutare și un meniu derulant în dreapta. TabBar în bottom permite comutarea între categoriile de produse. Această configurație acoperă majoritatea scenariilor aplicațiilor mobile: navigare, căutare, opțiuni suplimentare și comutare între secțiuni — totul într-un singur panou superior.
Întrebări frecvente
Înălțimea AppBar este fixă (56dp) și nu poate fi modificată direct. Pentru înălțime personalizată, folosiți PreferredSize, înfășurând un widget personalizat cu înălțimea dorită. Alternativ, folosiți SliverAppBar cu collapsedHeight pentru gestionarea flexibilă a dimensiunii în stare restrânsă fără a pierde funcționalitatea panoului standard.
Setați proprietatea elevation: 0 în constructorul AppBar. Aceasta va elimina umbra și va face panoul vizual plat, ceea ce corespunde stilisticii Material 3. Pentru control complet, folosiți shadowColor: Colors.transparent pentru a suprascrie culoarea umbrei fără a modifica elevation, dacă trebuie să păstrați coordonata z.
AppBar — un panou static cu înălțime fixă plasat în Scaffold.appBar. SliverAppBar — o versiune dinamică folosită în CustomScrollView, care se poate restrânge, fixa și anima la derulare. SliverAppBar oferă proprietățile collapsedHeight, expandedHeight, pinned și floating pentru gestionarea flexibilă a comportamentului la scroll.
Adăugați un IconButton cu iconița de căutare în lista actions. La apăsare, puteți apela showSearch cu un SearchDelegate personalizat, care va deschide ecranul de căutare cu animație automată. Alternativ — înlocuiți title cu un TextField, transformând AppBar într-o bară de căutare pe loc, convenabilă pentru cataloage și liste.
În mod implicit, centerTitle este null, iar comportamentul depinde de platformă: pe Android titlul este aliniat la stânga, pe iOS — la centru. Setați explicit centerTitle: true pentru centrare forțată pe ambele platforme. Dacă titlul nu se centrează din cauza leading, verificați că leading nu este null — prezența sa deplasează titlul la dreapta.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și