AppBar هو ويجت اللوحة العلوية للشاشة في Flutter يقوم بتنفيذ مكون Material Design بعنوان وإجراءات وزر تنقل وعلامات تبويب. بالخلاف من اللوحة المخصصة القائمة على Row أو Stack، يوفر AppBar معمارية جاهزة بارتفاع صحيح يبلغ 56دبق (48دبق في الحالة المطوية) ومعالجة تلقائية SafeArea. وفقًا لـ Flutter API Reference (2026)، يدعم AppBar الرسوم المتحركة عند التمرير عبر SliverAppBar والتكامل مع Material 3 من خلال الوساط forceMaterialTransparency. في تطبيق الهاتف النموذجي، يعمل AppBar كمركز تنقل ومعلومات، يجمع عنوان الصفحة وإجراءات النظام والتبديل بين الأقسام.
النقاط الرئيسية
AppBar هو مكون Material قياسي للوحة العلوية يظهر في أعلى Scaffold. يحتوي على عنوان الشاشة وزر تنقل (عادة أيقونة «هامبرجر» أو سهم «رجوع») وإجراءات — أيقونات تفتح البحث أو الإعدادات أو وظائف أخرى. يتكيف AppBar تلقائيًا مع المنصة: في Android يستخدم ظل Material سفلي قياسيًا، في iOS — تصميم أكثر تساطحًا مع شفافية.
يقوم AppBar بتنفيذ واجهة PreferredSizeWidget، مما يعني أن ارتفاعه ثابت ومعروف قبل البناء. افتراضيًا، يبلغ ارتفاع AppBar 56دبق على Android و 44دبق على 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. يجب ألا يزيد عرض كل عنصر عن 48دبق (معيار 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 يدعم الرسوم المتحركة عند التمرير: الطي وتأثير التنوع والتثبيت. وبالخلاف من AppBar القياسي، فإن SliverAppBar هو ويجت sliver ويمكنه تغيير الحجم ديناميكيًا حسب موقع التمرير.
يتم تحديد الأوضاع الرئيسية لـ SliverAppBar من خلال المزيج من خصائص pinned وfloating وsnap. في وضع pinned، تبقى اللوحة دائمًا مرئية في أعلى الشاشة. في وضع floating، تظهر عند التمرير للخلف. يخلق المزيج floating + snap سلوك لوحة «لاصقة» تظهر عند أدنى تمرير للأعلى، وهو ما يستخدم عادة في خلافات الأخبار.
وفقًا لـ Flutter API SliverAppBar (2026)، لاستخدام SliverAppBar يلزم استبدال ListView أو Column العادي بـ CustomScrollView يحتوي على ويجدات sliver. يستمر Scaffold في العمل بشكل صحيح، ولكن يجب أن تكون خاصية appBar لـ Scaffold فارغة — يتم وضع 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 في الأسفل بالتبديل بين فئات المنتجات. يغطي هذا التكوين معظم سيناريوهات تطبيقات الهاتف: التنقل والبحث والخيارات الإضافية وتبديل الأقسام — كلها في لوحة علوية واحدة.
الأسئلة الشائعة
ارتفاع AppBar ثابت (56دبق) ولا يمكن تغييره مباشرة. للحصول على ارتفاع مخصص، استخدم 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 مخصص يفتح شاشة البحث برسوم متحركة تلقائية. بديلاً، استبدل العنوان بـ TextField، محولاً AppBar إلى شريط بحث مضمن، وهو أمر مناسب للكتالوجات والقوائم.
افتراضيًا centerTitle هو null، ويعتمد السلوك على المنصة: في Android يتم محاذاة العنوان لليسار، في iOS — للمركز. ضبط centerTitle: true صراحة لفرض التوسيط على كلتا المنصتين. إذا لم يتم توسيط العنوان بسبب leading، تحقق من أن leading ليس null — وجوده يزيح العنوان إلى اليمين.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.