AppBar — е уиджет на горния панел на екрана във Flutter, който имплементира Material Design компонент със заглавие, действия, бутон за навигация и раздели. За разлика от персонализиран панел на Row или Stack, AppBar предоставя готова архитектура с правилна височина от 56dp (48dp в свито състояние) и автоматична обработка на SafeArea. Според Flutter API Reference (2026), AppBar поддържа анимация при скролване чрез SliverAppBar и интеграция с Material 3 чрез параметъра forceMaterialTransparency. В типично мобилно приложение AppBar играе ролята на навигационен и информационен център, обединявайки заглавието на страницата, системните действия и превключването между секции.
Основни точки
AppBar — е стандартен Material компонент на горния панел, който се показва в горната част на Scaffold. Съдържа заглавието на екрана, бутон за навигация (обикновено икона „хембургер" или стрелка „Назад") и действия — икони, отварящи търсене, настройки или други функции. AppBar автоматично се адаптира към платформата: на Android се използва стандартен Material bottom-shadow, на iOS — по-плосък дизайн с прозрачност.
AppBar имплементира интерфейса PreferredSizeWidget, което означава, че височината му е фиксирана и известна преди изграждането. По подразбиране височината на AppBar е 56dp на Android и 44dp на iOS в портретна ориентация, като се взема предвид SafeArea отгоре. Тази характеристика позволява на Scaffold да изчисли предварително наличното пространство за body, избягвайки прекомпозиране по време на рендиране.
Според Flutter Material Library Guide (2026), AppBar е преминал през няколко итерации: във Flutter 1.x беше прост контейнер с текст, във Flutter 2.x получи поддръжка за Material 3 и flexibleSpace, а във Flutter 3.x — интеграция със System UI (цвят на лентата на състоянието, прозрачност). Модерният AppBar поддържа Dynamic Color от Material You на устройства с Android 12+.
AppBar предоставя набор от параметри, които контролират всяка част от горния панел. Разбирането на тези свойства позволява гъвкаво настройване на панела за всякакви дизайн изисквания без създаване на персонализирани решения.
| Свойство | Тип | Описание |
|---|---|---|
| title | Widget? | Основно заглавие на панела, обикновено Text с името на екрана |
| leading | Widget? | Уиджет вляво от заглавието (бутон „Назад" или икона на меню) |
| actions | List<Widget>? | Списък с уиджети за действия вдясно (IconButton, PopupMenuButton) |
| bottom | PreferredSizeWidget? | Долна област за TabBar или персонализиран уиджет |
| flexibleSpace | Widget? | Фонов уиджет, анимиран при скролване в SliverAppBar |
| backgroundColor | Color? | Цвят на фона на панела, заместващ цвета на темата |
| elevation | double | Сянка под панела, създаваща ефект на повдигане над съдържанието |
| centerTitle | bool? | Центриране на заглавието (true — поведение Material 3, false — Android стил) |
Свойството title приема всеки уиджет, но най-често се използва Text с настройка на стил чрез TextStyle. За дълги заглавия се препоръчва увиване на title в Flexible, за да се съкрати текстът правилно при липса на място. Свойството leading автоматично се заменя с BackButton при преминаване към вложен екран чрез Navigator.push, ако не е зададено изрично.
Списъкът actions съдържа уиджети, подравнени към десния ръб на AppBar. Всеки елемент не трябва да бъде по-широк от 48dp (стандарт Material Design). За групиране на действия използвайте PopupMenuButton — това скрива по-малко важните опции в падащо меню и спазва препоръките на Material за плътност на интерфейса.
AppBar поддържа дълбоко персонализиране чрез свойствата за цвят, сянка и полета. Основният външен вид се наследява от темата на приложението, но всяко свойство може да бъде заменено индивидуално. Нека разгледаме основните сценарии за настройка.
Цветът на фона на AppBar се задава чрез backgroundColor. Ако не е посочен, се използва appBarTheme от ThemeData. В Material 3 цветът на AppBar се изчислява автоматично от ColorScheme.primary, но може да бъде заменен за конкретен екран. За прозрачен AppBar (често използван в профили) задайте backgroundColor: Colors.transparent с elevation: 0.
Свойството elevation управлява сянката под AppBar. Стойност 0 премахва сянката, създавайки ефект на „плосък" панел, което е актуално за Material 3. Стойност 4 дава стандартна Material Design сянка. За персонализирано управление на сянката използвайте shadowColor — цвят на сянката, който визуално отделя панела от съдържанието.
За управление на цвета на текста в AppBar използвайте foregroundColor. Това свойство влияе на цвета на заглавието, иконите и текста в actions. При промяна на backgroundColor автоматично се избира контрастен foregroundColor, но може да бъде зададен принудително за нестандартни дизайни.
SliverAppBar — е разширение на AppBar за използване вътре в CustomScrollView, което поддържа анимация при скролване: свиване (collapsing), паралакс ефект и закрепване (pinned). За разлика от стандартния AppBar, SliverAppBar е sliver уиджет и може динамично да променя размера си в зависимост от позицията на скролване.
Основните режими на SliverAppBar се определят от комбинацията на свойствата pinned, floating и snap. В режим pinned панелът винаги остава видим в горната част на екрана. В режим floating се появява при скролване назад. Комбинацията floating + snap създава поведение на „лепкав" панел, който излиза при най-малкото скролване нагоре, често използван в новинарски потоци.
Според Flutter API SliverAppBar (2026), за използване на SliverAppBar е необходимо да замените обикновения ListView или Column с CustomScrollView с sliver уиджети. Scaffold продължава да работи правилно, но свойството appBar на Scaffold трябва да бъде null — SliverAppBar се поставя вътре в CustomScrollView като първи sliver.
Нека разгледаме пример на AppBar с търсене, падащо меню и TabBar. Този код демонстрира типична конфигурация на горния панел в продукционно Flutter приложение.
Scaffold(
appBar: AppBar(
title: const Text('Каталог'),
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('Настройки')),
const PopupMenuItem(value: 'about', child: Text('Относно приложението')),
],
),
],
bottom: const TabBar(
tabs: [
Tab(text: 'All'),
Tab(text: 'New'),
Tab(text: 'Popular'),
],
),
),
body: const TabBarView(
children: [
AllProductsPage(),
NewProductsPage(),
PopularProductsPage(),
],
),
)
В примера AppBar съдържа центрирано заглавие, бутон за отваряне на Drawer вляво, икона за търсене и падащо меню вдясно. TabBar в bottom позволява превключване между категории продукти. Тази конфигурация покрива повечето сценарии на мобилни приложения: навигация, търсене, допълнителни опции и превключване между секции — всичко в един горен панел.
Често задавани въпроси
Височината на AppBar е фиксирана (56dp) и не може да бъде променена директно. За персонализирана височина използвайте PreferredSize, като увиете в него персонализиран уиджет с желаната височина. Алтернативно използвайте SliverAppBar с collapsedHeight за гъвкаво управление на размера в свито състояние без загуба на функционалност на стандартния панел.
Задайте свойството elevation: 0 в конструктора на AppBar. Това ще премахне сянката и ще направи панела визуално плосък, което съответства на стилистиката на Material 3. За пълен контрол използвайте shadowColor: Colors.transparent, за да замените цвета на сянката без да променяте elevation, ако трябва да запазите z-координатата.
AppBar — статичен панел с фиксирана височина, поставен в Scaffold.appBar. SliverAppBar — динамична версия, използвана вътре в CustomScrollView, която може да се свива, закрепва и анимира при скролване. SliverAppBar предоставя свойствата collapsedHeight, expandedHeight, pinned и floating за гъвкаво управление на поведението при скролване.
Добавете IconButton с икона за търсене в списъка actions. При натискане можете да извикате showSearch с персонализиран SearchDelegate, който ще отвори екрана за търсене с автоматична анимация. Алтернативно — заменете title с TextField, превръщайки AppBar в лента за търсене на място, което е удобно за каталози и списъци.
По подразбиране centerTitle е null и поведението зависи от платформата: на Android заглавието е подравнено вляво, на iOS — в центъра. Изрично задайте centerTitle: true за принудително центриране на двете платформи. Ако заглавието не се центрира поради leading, проверете дали leading не е null — присъствието му измества заглавието надясно.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също