AppBar — چیست، تنظیمات و ویجت‌های Flutter

نویسنده: IT Sectr منتشر شده: 2026-07-02 زمان مطالعه: 9 دقیقه

AppBar — ویجت پنل بالایی صفحه در Flutter است که کامپوننت Material Design را با عنوان، اقدامات، دکمه ناوبری و تب‌ها پیاده‌سازی می‌کند. برخلاف پنل سفارشی روی Row یا Stack، AppBar معماری آماده‌ای با ارتفاع صحیح 56dp (48dp در حالت جمع‌شده) و پردازش خودکار SafeArea ارائه می‌دهد. به گفته Flutter API Reference (2026)، AppBar از انیمیشن هنگام اسکرول از طریق SliverAppBar و ادغام با Material 3 از طریق پارامتر forceMaterialTransparency پشتیبانی می‌کند. در یک برنامه معمولی موبایل، AppBar نقش یک مرکز ناوبری و اطلاعاتی را ایفا می‌کند و عنوان صفحه، اقدامات سیستمی و جابجایی بین بخش‌ها را ترکیب می‌کند.

نکات اصلی

  • AppBar — ویجت پنل بالایی در Flutter با عنوان، actions، leading و پشتیبانی از TabBar و Material 3
  • Title — متن عنوان که بسته به پلتفرم وسط‌چین یا چپ‌چین می‌شود
  • Actions — لیست ویجت‌های عملیاتی (IconButton, PopupMenuButton) که در سمت راست AppBar قرار می‌گیرند
  • Leading — دکمه ناوبری در سمت چپ (آیکون همبرگری برای Drawer یا دکمه «بازگشت» برای صفحات تو در تو)
  • Bottom — ناحیه پایینی AppBar برای嵌入 TabBar، PreferredSize یا ویجت‌های سفارشی

AppBar در Flutter چیست

AppBar — یک کامپوننت استاندارد Material پنل بالایی است که در بالای Scaffold نمایش داده می‌شود. این شامل عنوان صفحه، دکمه ناوبری (معمولاً آیکون همبرگری یا فلش «بازگشت») و اقدامات — آیکون‌هایی برای باز کردن جستجو، تنظیمات یا سایر عملکردها است. AppBar به طور خودکار با پلتفرم تطبیق می‌یابد: در اندروید از سایه پایین Material استاندارد و در iOS از طراحی تخت‌تر با شفافیت استفاده می‌کند.

AppBar رابط PreferredSizeWidget را پیاده‌سازی می‌کند، به این معنی که ارتفاع آن ثابت و قبل از ساخت مشخص است. به طور پیش‌فرض، ارتفاع AppBar در اندروید 56dp و در iOS در حالت عمودی 44dp با در نظر گرفتن 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 در دستگاه‌های اندروید 12+ پشتیبانی می‌کند.

ساختار AppBar: ویژگی‌ها و پارامترها

AppBar مجموعه‌ای از پارامترها را ارائه می‌دهد که هر بخش از پنل بالایی را کنترل می‌کنند. درک این ویژگی‌ها امکان تنظیم انعطاف‌پذیر پنل را برای هر نیاز طراحی بدون ایجاد راه‌حل‌های سفارشی فراهم می‌کند.

ویژگینوعتوضیحات
titleWidget?عنوان اصلی پنل، معمولاً Text با نام صفحه
leadingWidget?ویجت سمت چپ عنوان (دکمه «بازگشت» یا آیکون منو)
actionsList<Widget>?لیست ویجت‌های عملیاتی در سمت راست (IconButton, PopupMenuButton)
bottomPreferredSizeWidget?ناحیه پایینی برای TabBar یا ویجت سفارشی
flexibleSpaceWidget?ویجت پس‌زمینه که هنگام اسکرول در SliverAppBar متحرک می‌شود
backgroundColorColor?رنگ پس‌زمینه پنل، که رنگ تم را بازنویسی می‌کند
elevationdoubleسایه زیر پنل، که اثر برجستگی بالای محتوا را ایجاد می‌کند
centerTitlebool?وسط‌چین کردن عنوان (true — رفتار Material 3، false — سبک اندروید)

Title و leading: تنظیم عنوان و ناوبری

ویژگی title هر ویجتی را می‌پذیرد، اما معمولاً از Text با تنظیم سبک از طریق TextStyle استفاده می‌شود. برای عنوان‌های طولانی، توصیه می‌شود title را در Flexible بپیچید تا متن در صورت کمبود جا به درستی بریده شود. ویژگی leading در صورت عدم تعیین صریح، هنگام انتقال به صفحه تو در تو از طریق Navigator.push به طور خودکار با BackButton جایگزین می‌شود.

Actions: قرار دادن آیکون‌های عملیاتی

لیست actions شامل ویجت‌هایی است که در لبه سمت راست AppBar قرار می‌گیرند. هر عنصر نباید پهن‌تر از 48dp (استاندارد Material Design) باشد. برای گروه‌بندی اقدامات از PopupMenuButton استفاده کنید — این کار گزینه‌های کم‌اهمیت‌تر را در منوی کشویی پنهان می‌کند و توصیه‌های Material برای تراکم رابط را رعایت می‌کند.

سفارشی‌سازی AppBar: استایل‌ها، رنگ‌ها و رفتار

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

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 در برنامه

بیایید مثال AppBar با جستجو، منوی کشویی و TabBar را بررسی کنیم. این کد پیکربندی معمول پنل بالایی را در یک برنامه تولیدی Flutter نشان می‌دهد.

dart
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 را در Flutter تغییر دهیم؟

ارتفاع AppBar ثابت است (56dp) و نمی‌توان آن را مستقیماً تغییر داد. برای ارتفاع سفارشی از PreferredSize استفاده کنید و ویجت سفارشی با ارتفاع مورد نظر را در آن بپیچید. به عنوان جایگزین، از SliverAppBar با collapsedHeight برای مدیریت انعطاف‌پذیر اندازه در حالت جمع‌شده بدون از دست دادن عملکرد پنل استاندارد استفاده کنید.

چگونه سایه زیر AppBar را حذف کنیم؟

ویژگی elevation: 0 را در سازنده AppBar تنظیم کنید. این کار سایه را حذف کرده و پنل را از نظر بصری صاف می‌کند که با سبک Material 3 مطابقت دارد. برای کنترل کامل از shadowColor: Colors.transparent استفاده کنید تا رنگ سایه را بدون تغییر elevation بازنویسی کنید، اگر نیاز به حفظ مختصات z دارید.

تفاوت AppBar با SliverAppBar چیست؟

AppBar — یک پنل ایستا با ارتفاع ثابت است که در Scaffold.appBar قرار می‌گیرد. SliverAppBar — نسخه پویایی است که در CustomScrollView استفاده می‌شود و می‌تواند هنگام اسکرول جمع شود، پین شود و متحرک شود. SliverAppBar ویژگی‌های collapsedHeight, expandedHeight, pinned و floating را برای مدیریت انعطاف‌پذیر رفتار هنگام اسکرول ارائه می‌دهد.

چگونه جستجو را به AppBar اضافه کنیم؟

یک IconButton با آیکون جستجو به لیست actions اضافه کنید. با فشار دادن، می‌توان showSearch را با SearchDelegate سفارشی فراخوانی کرد که صفحه جستجو را با انیمیشن خودکار باز می‌کند. به عنوان جایگزین — title را با TextField جایگزین کنید و AppBar را به نوار جستجوی درجا تبدیل کنید که برای کاتالوگ‌ها و لیست‌ها مناسب است.

چرا عنوان در AppBar وسط‌چین نمی‌شود؟

به طور پیش‌فرض centerTitle برابر null است و رفتار به پلتفرم بستگی دارد: در اندروید عنوان به چپ چین می‌شود، در iOS به وسط. برای وسط‌چین اجباری در هر دو پلتفرم، centerTitle: true را تنظیم کنید. اگر عنوان به دلیل leading وسط‌چین نمی‌شود، بررسی کنید که leading null نباشد — وجود آن عنوان را به راست منتقل می‌کند.

خلاصه

  • AppBar — پنل بالایی استاندارد در Flutter با عنوان، leading، actions و bottom برای TabBar که به طور خودکار SafeArea را در نظر می‌گیرد
  • Title — عنصر مرکزی پنل که هر ویجتی را می‌پذیرد و می‌توان از طریق centerTitle آن را وسط‌چین کرد
  • Actions — لیست ویجت‌های عملیاتی در سمت راست، هر کدام تا 48dp عرض طبق استاندارد Material Design
  • Leading — دکمه ناوبری در سمت چپ که هنگام انتقال به صفحه تو در تو به طور خودکار با BackButton جایگزین می‌شود
  • SliverAppBar — گسترش AppBar برای CustomScrollView با پشتیبانی از جمع‌شدن، پین شدن و اثر پارالاکس
  • Material 3 — AppBar از Dynamic Color، شفافیت و NavigationBar از طریق پارامتر forceMaterialTransparency پشتیبانی می‌کند
  • سفارشی‌سازی — ویژگی‌های backgroundColor, elevation, foregroundColor و shadowColor امکان تنظیم دقیق ظاهر را برای طراحی پروژه فراهم می‌کنند

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید