🔹 ما هو BottomNavigationBar ؟
- هو شريط تنقل يظهر أسفل التطبيق.
- يحتوي على أيقونات (وأحيانًا نصوص) تمثل أقسام التطبيق الرئيسية.
- يشبه كثيرًا التبويبات (TabBar) لكن الفرق أنه دائمًا ثابت بأسفل الشاشة.
🔹 مثال بسيط
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int _selectedIndex = 0;
final List<Widget> _pages = [
Center(child: Text("الرئيسية")),
Center(child: Text("المفضلة")),
Center(child: Text("الإعدادات")),
];
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("BottomNavigationBar")),
body: _pages[_selectedIndex],
bottomNavigationBar: BottomNavigationBar(
currentIndex: _selectedIndex,
onTap: _onItemTapped,
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: "الرئيسية",
),
BottomNavigationBarItem(
icon: Icon(Icons.star),
label: "المفضلة",
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
label: "الإعدادات",
),
],
),
),
);
}
}
Dart🔹 أهم الخصائص
1. items
- قائمة من BottomNavigationBarItem.
- كل عنصر يحتوي على:
icon: الأيقونة.labelأوtitle: النص أسفل الأيقونة.activeIcon: أيقونة بديلة عندما يكون العنصر نشطًا.
2. currentIndex
- تحدد أي عنصر نشط حاليًا (مؤشر يبدأ من 0).
3. onTap
- دالة تستدعى عند الضغط على عنصر، تعطيك رقم العنصر (index).
- عادة تُستخدم مع
setStateلتغيير الصفحة.
4. type
- تتحكم بطريقة عرض الأيقونات/النصوص:
BottomNavigationBarType.fixed(افتراضي): جميع العناصر تظهر نصوصها، حتى لو كثيرة.BottomNavigationBarType.shifting: النص يظهر فقط للعنصر النشط، مع تأثير لوني جميل.
5. selectedItemColor / unselectedItemColor
- لون العنصر النشط مقابل غير النشط.
6. backgroundColor
- اللون الخلفي للشريط بالكامل.
7. iconSize
- حجم الأيقونات (افتراضي 24).
8. showSelectedLabels / showUnselectedLabels
- تتحكم في إظهار أو إخفاء النصوص أسفل الأيقونات.
🔹 أماكن وحالات الاستخدام
- التطبيقات اللي عندها أقسام أساسية (الرئيسية – البحث – الإشعارات – الحساب).
- بديل لـ Drawer أو TabBar لما تكون الأقسام قليلة (3–5).
- جيد للتطبيقات اللي فيها تنقل سريع بين شاشات رئيسية.
🔹 نصائح
- لا تستخدم أكثر من 5 عناصر (مزدحم ويقلل تجربة المستخدم).
- إذا عندك أقسام كثيرة → استخدم Drawer أو NavigationRail.
- إذا أردت أن تختفي/تظهر الـ BottomNavigationBar حسب الصفحة → غلّفه بـ
VisibilityأوOffstage. - من الأفضل أن تبني التنقل بـ IndexedStack بدل من استبدال كامل الصفحة (يحافظ على حالة الصفحات).
🔹 مثال متقدم (مع ألوان وأنماط مختلفة)
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.shifting,
currentIndex: _selectedIndex,
onTap: _onItemTapped,
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: "الرئيسية",
backgroundColor: Colors.teal,
),
BottomNavigationBarItem(
icon: Icon(Icons.star),
label: "المفضلة",
backgroundColor: Colors.purple,
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
label: "الإعدادات",
backgroundColor: Colors.indigo,
),
],
),
Dart✨ الخلاصة:
- BottomNavigationBar = شريط تنقل سفلي لعرض 3–5 أقسام رئيسية.
- يعتمد على
currentIndex+onTapلإدارة التنقل. typeيحدد الشكل (ثابت أو متغير).- يمكن تنسيقه بالكامل بالألوان، الأحجام، إخفاء/إظهار النصوص.