ListTile

ما هي ListTile؟

ListTile هي ودجت جاهزة من Flutter تُستخدم لإنشاء صف واحد (Row) من العناصر، غالبًا داخل ListView أو Drawer أو Card.
تُستخدم كثيرًا لعرض قائمة عناصر (مثل الإعدادات، الرسائل، القوائم الجانبية) مع:

  • عنوان (title)
  • نص فرعي (subtitle)
  • أيقونات قبل وبعد النص
  • أحداث الضغط (onTap, onLongPress)
البنية العامة
ListTile(
  leading: Icon(Icons.account_circle), // أيقونة أو صورة على اليسار
  title: Text("الاسم"),                // النص الرئيسي
  subtitle: Text("تفاصيل إضافية"),     // النص الفرعي
  trailing: Icon(Icons.arrow_forward), // أيقونة على اليمين
  onTap: () {
    print("تم الضغط");
  },
);
Dart
الخصائص الرئيسية في ListTile
الخاصيةالنوعالوصف
leadingWidgetعنصر يُعرض في بداية الصف (يسار أو يمين حسب اتجاه اللغة) مثل أيقونة أو صورة
titleWidgetالنص الرئيسي أو الودجت الأساسي في الصف
subtitleWidgetنص إضافي أسفل الـ title
trailingWidgetعنصر يُعرض في نهاية الصف (مثل أيقونة سهم أو زر)
isThreeLineboolإذا كانت true يسمح بظهور 3 أسطر (title + subtitle بسطرين)
denseboolيجعل الـ ListTile أصغر حجمًا (تقليل المسافات)
contentPaddingEdgeInsetsGeometryللتحكم في المسافات حول محتوى الصف
enabledboolإذا كانت false يعطل الصف (لا يقبل الضغط ويظهر بلون باهت)
selectedboolيغيّر مظهر الصف للإشارة أنه محدد
onTapFunctionحدث عند الضغط
onLongPressFunctionحدث عند الضغط المطول
selectedTileColorColorلون خلفية العنصر عند كونه محددًا
tileColorColorلون خلفية الصف
focusColorColorاللون عند الحصول على الـ focus
hoverColorColorاللون عند تمرير المؤشر (على الويب والسطح)
أمثلة عملية
1️⃣ أبسط مثال
ListTile(
  leading: Icon(Icons.phone),
  title: Text("اتصل بنا"),
  subtitle: Text("اضغط للاتصال"),
  trailing: Icon(Icons.arrow_forward_ios),
  onTap: () {
    print("اتصل بنا");
  },
);
Dart
2️⃣ ListTile داخل ListView
ListView(
  children: [
    ListTile(
      leading: Icon(Icons.home),
      title: Text("الصفحة الرئيسية"),
      onTap: () {},
    ),
    ListTile(
      leading: Icon(Icons.settings),
      title: Text("الإعدادات"),
      subtitle: Text("تحكم في التطبيق"),
      onTap: () {},
    ),
  ],
);
Dart
3️⃣ استخدام صورة كـ leading
ListTile(
  leading: CircleAvatar(
    backgroundImage: AssetImage("assets/images/user.png"),
  ),
  title: Text("محمد علي"),
  subtitle: Text("نشط الآن"),
  trailing: Icon(Icons.chat),
);
Dart
4️⃣ تخصيص الـ Padding واللون
ListTile(
  contentPadding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
  tileColor: Colors.blue.shade50,
  leading: Icon(Icons.email, color: Colors.blue),
  title: Text("بريد إلكتروني"),
  subtitle: Text("[email protected]"),
);
Dart
نصائح عند استخدام ListTile
  1. لا تستخدمه لعناصر معقدة جدًا — إذا احتجت تصميم صف مخصص جدًا، استخدم Row أو Container بدلًا من ListTile.
  2. استغل leading و trailing لعرض الأيقونات والأزرار التفاعلية.
  3. استخدم dense: true إذا كانت لديك قائمة طويلة وتريد تقليل المسافات بين العناصر.
  4. اجعل الأحداث واضحة مثل تغيير اللون عند الضغط (selected: true) لتوضيح التفاعل.
  5. ضعه داخل Card أو ListView لنتيجة أفضل في المظهر.