AppBar — är en widget för den övre panelen på skärmen i Flutter som implementerar Material Design-komponenten med titel, åtgärder, navigeringsknapp och flikar. Till skillnad från en anpassad panel på Row eller Stack erbjuder AppBar en färdig arkitektur med rätt höjd på 56dp (48dp i hopfällt tillstånd) och automatisk hantering av SafeArea. Enligt Flutter API Reference (2026) stöder AppBar animation vid scrollning via SliverAppBar och integration med Material 3 genom parametern forceMaterialTransparency. I en typisk mobilapp fungerar AppBar som ett navigerings- och informationsnav, som kombinerar sidans titel, systemåtgärder och växling mellan sektioner.
Huvudpunkter
AppBar — är en standard Material-komponent för den övre panelen som visas högst upp i Scaffold. Den innehåller skärmens titel, navigeringsknapp (vanligtvis en hamburgerikon eller "Tillbaka"-pil) och åtgärder — ikoner som öppnar sökning, inställningar eller andra funktioner. AppBar anpassar sig automatiskt till plattformen: på Android används standard Material bottom-shadow, på iOS — en plattare design med genomskinlighet.
AppBar implementerar gränssnittet PreferredSizeWidget, vilket innebär att dess höjd är fast och känd innan bygget. Som standard är höjden på AppBar 56dp på Android och 44dp på iOS i porträttorientering, med hänsyn till SafeArea ovanför. Denna funktion gör att Scaffold kan beräkna tillgängligt utrymme för body i förväg och undvika omkomposition under rendering.
Enligt Flutter Material Library Guide (2026) har AppBar genomgått flera iterationer: i Flutter 1.x var det en enkel behållare med text, i Flutter 2.x fick det stöd för Material 3 och flexibleSpace, och i Flutter 3.x — integration med System UI (statusfältsfärg, genomskinlighet). Modern AppBar stöder Dynamic Color från Material You på Android 12+-enheter.
AppBar erbjuder en uppsättning parametrar som styr varje del av den övre panelen. Att förstå dessa egenskaper möjliggör flexibel konfiguration av panelen för alla designkrav utan att skapa anpassade lösningar.
| Egenskap | Typ | Beskrivning |
|---|---|---|
| title | Widget? | Panelens huvudtitel, vanligtvis Text med skärmens namn |
| leading | Widget? | Widget till vänster om titeln ("Tillbaka"-knapp eller menyikon) |
| actions | List<Widget>? | Lista med åtgärds-widgets till höger (IconButton, PopupMenuButton) |
| bottom | PreferredSizeWidget? | Nedre området för TabBar eller anpassad widget |
| flexibleSpace | Widget? | Bakgrundswidget som animeras vid scrollning i SliverAppBar |
| backgroundColor | Color? | Panelens bakgrundsfärg som åsidosätter temafärgen |
| elevation | double | Skugga under panelen som skapar en effekt av att lyfta ovanför innehållet |
| centerTitle | bool? | Centrering av titeln (true — Material 3-beteende, false — Android-stil) |
Egenskapen title accepterar vilken widget som helst, men oftast används Text med stilkonfiguration via TextStyle. För långa titlar rekommenderas att linda title i Flexible så att texten kapas korrekt vid brist på utrymme. Egenskapen leading ersätts automatiskt med BackButton vid övergång till en nästlad skärm via Navigator.push, om den inte är explicit inställd.
Listan actions innehåller widgets som är högerjusterade i AppBar. Varje element bör inte vara bredare än 48dp (Material Design-standard). För att gruppera åtgärder, använd PopupMenuButton — detta döljer mindre viktiga alternativ i en rullgardinsmeny och följer Materials rekommendationer om gränssnittets densitet.
AppBar stöder djup anpassning genom egenskaper för färg, skugga och marginaler. Det grundläggande utseendet ärvs från appens tema, men varje egenskap kan åsidosättas individuellt. Låt oss titta på de viktigaste konfigurationsscenarierna.
Bakgrundsfärgen på AppBar ställs in via backgroundColor. Om den inte anges används appBarTheme från ThemeData. I Material 3 beräknas AppBar-färgen automatiskt från ColorScheme.primary, men kan åsidosättas för en specifik skärm. För en genomskinlig AppBar (ofta använd i profiler), ställ in backgroundColor: Colors.transparent med elevation: 0.
Egenskapen elevation styr skuggan under AppBar. Värdet 0 tar bort skuggan och skapar en "platt" paneleffekt, vilket är relevant för Material 3. Värdet 4 ger en standard Material Design-skugga. För anpassad skugghantering, använd shadowColor — skuggfärgen som visuellt separerar panelen från innehållet.
För att styra textfärgen i AppBar, använd foregroundColor. Denna egenskap påverkar färgen på titeln, ikonerna och texten i actions. När backgroundColor ändras väljs automatiskt en kontrasterande foregroundColor, men den kan forceras för icke-standardiserade designer.
SliverAppBar — är en utökning av AppBar för användning i CustomScrollView som stöder animation vid scrollning: hopfällning (collapsing), parallaxeffekt och fastsättning (pinned). Till skillnad från standard AppBar är SliverAppBar en sliver-widget och kan dynamiskt ändra storlek beroende på scrollpositionen.
Huvudlägena för SliverAppBar bestäms av kombinationen av egenskaperna pinned, floating och snap. I pinned-läget förblir panelen alltid synlig högst upp på skärmen. I floating-läget visas den vid scrollning bakåt. Kombinationen floating + snap skapar ett "klibbigt" panelbeteende som visas vid minsta scrollning uppåt, ofta använd i nyhetsflöden.
Enligt Flutter API SliverAppBar (2026) måste du för att använda SliverAppBar ersätta den vanliga ListView eller Column med CustomScrollView med sliver-widgets. Scaffold fortsätter att fungera korrekt, men egenskapen appBar i Scaffold måste vara null — SliverAppBar placeras i CustomScrollView som första sliver.
Låt oss titta på ett exempel på AppBar med sökning, rullgardinsmeny och TabBar. Denna kod visar en typisk konfiguration av den övre panelen i en produktions-Flutter-app.
Scaffold(
appBar: AppBar(
title: const Text('Katalog'),
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('Inställningar')),
const PopupMenuItem(value: 'about', child: Text('Om appen')),
],
),
],
bottom: const TabBar(
tabs: [
Tab(text: 'All'),
Tab(text: 'New'),
Tab(text: 'Popular'),
],
),
),
body: const TabBarView(
children: [
AllProductsPage(),
NewProductsPage(),
PopularProductsPage(),
],
),
)
I exemplet innehåller AppBar en centrerad titel, en knapp för att öppna Drawer till vänster, en sökikon och en rullgardinsmeny till höger. TabBar i bottom möjliggör växling mellan produktkategorier. Denna konfiguration täcker de flesta scenarier för mobila appar: navigering, sökning, ytterligare alternativ och växling mellan sektioner — allt i en övre panel.
Vanliga frågor
Höjden på AppBar är fast (56dp) och kan inte ändras direkt. För anpassad höjd, använd PreferredSize och linda en anpassad widget med önskad höjd i den. Alternativt, använd SliverAppBar med collapsedHeight för flexibel hantering av storleken i hopfällt tillstånd utan att förlora funktionaliteten hos standardpanelen.
Ställ in egenskapen elevation: 0 i AppBar-konstruktorn. Detta tar bort skuggan och gör panelen visuellt platt, vilket överensstämmer med Material 3-stilen. För fullständig kontroll, använd shadowColor: Colors.transparent för att åsidosätta skuggfärgen utan att ändra elevation, om du behöver behålla z-koordinaten.
AppBar — en statisk panel med fast höjd placerad i Scaffold.appBar. SliverAppBar — en dynamisk version som används i CustomScrollView som kan fällas ihop, fästas och animeras vid scrollning. SliverAppBar erbjuder egenskaperna collapsedHeight, expandedHeight, pinned och floating för flexibel hantering av beteendet vid scrollning.
Lägg till en IconButton med sökikon i listan actions. Vid tryckning kan du anropa showSearch med en anpassad SearchDelegate som öppnar sökskärmen med automatisk animation. Alternativt — ersätt title med en TextField, vilket gör AppBar till en sökradd på plats, bekväm för kataloger och listor.
Som standard är centerTitle null och beteendet beror på plattformen: på Android är titeln vänsterjusterad, på iOS centrerad. Ställ explicit in centerTitle: true för tvingad centrering på båda plattformarna. Om titeln inte centreras på grund av leading, kontrollera att leading inte är null — dess närvaro flyttar titeln till höger.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också