مقدمة : 

تعتبر القائمة الجانبية من أكثر العناصر استخداماً في التطبيقات , فهي تسهل التنقل بين الواجهات الرئيسية في التطبيق وتعطي المستخدم شعوراً بالتحكم الكامل بالتطبيق .

Flutter Drawer Class- How to Add Side Menu In Flutter

استعمال Drawer في واجهة التطبيق : 

يتم استدعاؤه ضمن خاصية drawer في  Scaffod و هو من أسهل العناصر استخداماً في التطبيق فهو يحتاج لخاصية child لتحوي قائمة عناصر تشمل مكوناته ,
كما يمكن استخدام باكجات جاهزة بتصاميم جميلة لتضمينه .



class DrawerExample extends StatelessWidget {
  const DrawerExample({super.key});

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      drawer: Drawer(),
    );
  }
}
 


الخصائص والمكونات : 

تتكون القائمة الجانبية عادةً من جزئين , وهي غير إلزامية حيث يمكنك تصميم أي شكل تريده , الجزء الأول هو مستطيل حساب المستخدم AccountHeader, والقسم الثاني هو باقي أقسام القائمة ( أزرار التنقل بين الواجهات ListTile ) 

تحمل القائمة الجانبية خاصية واحدة هي الإبن ويكون عادة عبارة عن ListView  وهو المكون الذي يحمل الجزئين السابقين , في المثال التالي سنشرح استخدامه مع خصائص أجزاءه :

UserAccountsDrawerHeader : هو مستطيل حساب المستخدم ويحوي على عدة خصائص منها : 

 

currentAccountPicture : تأخذ قيمة Widget وعادة ما يتم وضع صورة بداخل CircleAvatar لتمثيلها .
 
accountName : تأخذ قيمة Widget و تستخدم للدلالة على اسم المستخدم .

accountEmail : تأخذ قيمة Widget و تستخدم للدلالة على بريد المستخدم .

decoration : تأخذ كلاس BoxDecoration للتحكم بشكل وستايل المستطيل .
 
ListTile : وهو عنصر يستخدم غالباً مع ListView ويحمل خصائص سهلة ليكون زر قائمة : 

leading : تأخذ قيمة Widget و عادة ما تستخدم أيقونة Icon
title : العنوان الرئيسي لعنصر القائمة .
 
subtitle : العنوان الفرعي لعنصر القائمة.
 
onTap : يأخذ قيمة Function ويمكن من خلاله تنفيذ أمر عند الضغط على عنصر القائمة.


 
 
class DrawerExample extends StatelessWidget {
  const DrawerExample({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      drawer: Drawer(
        child: ListView(
          children: [
            UserAccountsDrawerHeader(
              currentAccountPicture: Image.asset("assets/images/user.png"),
              accountName: const Text("Name"),
              accountEmail: const Text("Email"),
              decoration: const BoxDecoration(color: Colors.orangeAccent),
            ),
            ListTile(
              leading: const Icon(Icons.home),
              title: const Text("الرئيسية"),
              subtitle: const Text("الواجهة الرئيسية للتطبيق"),
              onTap: () {},
            ),
            ListTile(
              leading: const Icon(Icons.settings),
              title: const Text("الإعدادات"),
              subtitle: const Text("إعدادت التطبيق"),
              onTap: () {},
            ),
          ],
        ),
      ),
    );
  }
}