✅ التعريف:
ListView.separated تشبه builder ولكنها تسمح بإضافة فاصل (separator) بين كل عنصرين.
✅ الصيغة العامة:
ListView.separated(
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(items[index]),
);
},
separatorBuilder: (context, index) => Divider(),
);
Dart
✅ أهم الخصائص:
| الخاصية | النوع | الشرح |
|---|
itemCount | int | عدد العناصر |
itemBuilder | Function | دالة بناء العنصر |
separatorBuilder | Function | دالة بناء الفاصل بين العناصر |
باقي الخصائص مثل: scrollDirection, physics, shrinkWrap, padding نفس builder | | |
✅ الاستخدام المثالي:
- عندما تحتاج إلى فواصل بين العناصر.
- عند عرض قائمة بإطار معين.
- لعرض بيانات بصريًا مفصولة (مثل الرسائل أو الإشعارات).
✅ مثال عملي:
ListView.separated(
itemCount: 5,
itemBuilder: (context, index) {
return ListTile(
leading: Icon(Icons.message),
title: Text('رسالة ${index + 1}'),
);
},
separatorBuilder: (context, index) {
return Divider(
color: Colors.grey,
thickness: 1,
);
},
);
Dart
✅ الفرق بين builder و separated
| الميزة | ListView.builder | ListView.separated |
|---|
| فواصل بين العناصر | ❌ لا يوجد فواصل افتراضيًا | ✅ يمكنك تخصيص فواصل |
| الأداء | ممتاز مع القوائم الكبيرة | ممتاز كذلك |
| سهولة الاستخدام | أسهل إذا لم تحتاج فواصل | أكثر تنظيمًا في حالة الفواصل |
🟢 نصائح وأفضل الممارسات:
- استخدم
builder إذا لم تحتاج إلى فاصل.
- استخدم
separated عندما تحتاج إلى فاصل بين العناصر بشكل دائم.
- ضع
shrinkWrap: true عندما تكون القائمة داخل Column أو أي عنصر غير محدد الارتفاع.
- اجعل
itemCount واضح لتجنب أخطاء RangeError.
- تجنب جعل القوائم الكبيرة داخل
SingleChildScrollView، فهذا يهدر الذاكرة.