تعتبر ListView في Flutter أحد أكثر عناصر الواجهة استخدامًا، حيث يمكن استخدامها لإنشاء قوائم عرض المستخدم. توفر Flutter مجموعة متنوعة من عناصر ListView المختلفة، بما في ذلك ListView.builder و ListView.separated. ومن بين هذه العناصر التي يمكن استخدامها في Flutter، يوجد ListView.custom الذي يمكِّن المطورين من إنشاء قوائم مخصصة بشكل كامل.
ما هو ListView.custom في فلاتر؟
ListView.custom هو عنصر واجهة المستخدم في Flutter يستخدم لإنشاء قائمة مخصصة بشكل كامل. يتيح ListView.custom للمطورين تحديد تفاصيل العرض والمظهر بشكل كامل، بدءًا من عدد العناصر وحتى تخصيص واجهة كل عنصر من القائمة.
“اقرأ أيضاً: شرح استخدام ويدجت StreamBuilder في فلاتر“
استخدام ListView.custom في فلاتر
يمكن استخدام ListView.custom في Flutter لإنشاء قائمة مخصصة بشكل كامل. يتم تحديد عدد العناصر في القائمة باستخدام childCount، وهذا مثال بسيط للتوضيح:
ListView.custom( childrenDelegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return ListTile( title: Text(_dataList[index]), subtitle: Text('This is a custom list item.'), trailing: Icon(Icons.arrow_forward), onTap: () { // Do something when the item is tapped }, ); }, childCount: _dataList.length, ), ),
خصائص ويدجت ListView.custom
تتوفر لـ ListView.custom العديد من الخصائص التي يمكن استخدامها لتخصيص قائمة المستخدم بشكل كامل. فيما يلي شرح لكل من الخصائص التي تتوفر في ListView.custom بالتفصيل:
1- الخاصية childrenDelegate
childrenDelegate هو خاصية مطلوبة وتستخدم لتعريف كيفية إنشاء العناصر في القائمة. يتم تمرير SliverChildDelegate إلى هذه الخاصية، الذي يحتوي على معلومات المندوب الذي يتحكم في إنشاء العناصر.
ListView.custom( childrenDelegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return ListTile( title: Text(_dataList[index]['title']), subtitle: Text(_dataList[index]['subtitle']), trailing: Icon(Icons.arrow_forward), onTap: () { // يمكن إضافة أي عملية تريد تنفيذها عند الضغط على العنصر هنا }, ); }, childCount: _dataList.length, ), )
2- الخاصية cacheExtent
cacheExtent هو عدد العناصر التي يجب تخزينها في الذاكرة المؤقتة. jساعد هذه الخاصية على تحسين الأداء عند التمرير في القائمة، حيث يتم تخزين العناصر في الذاكرة المؤقتة بدلاً من إعادة إنشائها في كل مرة.
ListView.custom( cacheExtent: 100, childrenDelegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return ListTile( title: Text(_dataList[index]['title']), subtitle: Text(_dataList[index]['subtitle']), trailing: Icon(Icons.arrow_forward), onTap: () { // يمكن إضافة أي عملية تريد تنفيذها عند الضغط على العنصر هنا }, ); }, childCount: _dataList.length, ), )
“اقرأ أيضاً: شرح استخدام ويدجت ClipOval في فلاتر“
3- الخاصية semanticChildCount
semanticChildCount هو عدد العناصر في القائمة التي تحتوي على بنية شجرية.
ListView.custom( semanticChildCount: _dataList.length, childrenDelegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return ListTile( title: Text(_dataList[index]['title']), subtitle: Text(_dataList[index]['subtitle']), trailing: Icon(Icons.arrow_forward), onTap: () { // يمكن إضافة أي عملية تريد تنفيذها عند الضغط على العنصر هنا }, ); }, childCount: _dataList.length, ), )
4- الخاصية itemExtent
itemExtent هو ارتفاع عنصر واحد في القائمة. يستخدم هذا الخيار لتحسين الأداء والتخفيف من احتياجات الذاكرة للقائمة.
ListView.custom( itemExtent: 50, childrenDelegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return ListTile( title: Text(_dataList[index]['title']), subtitle: Text(_dataList[index]['subtitle']), trailing: Icon(Icons.arrow_forward), onTap: () { // يمكن إضافة أي عملية تريد تنفيذها عند الضغط على العنصر هنا }, ); }, childCount: _dataList.length, ), )
مثال على استخدام ListView.custom في Flutter
هذا هو مثال تطبيق بسيط على استخدام ListView.custom في Flutter لعرض قائمة بسيطة من النصوص:
import 'package:flutter/material.dart'; void main() { runApp(CustomListViewApp()); } class CustomListViewApp extends StatelessWidget { final List<String> _itemList = [ 'Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6', 'Item 7', 'Item 8', 'Item 9', 'Item 10', ]; @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Custom ListView Example', home: Scaffold( appBar: AppBar( title: const Text('Custom ListView Example'), ), body: ListView.custom( childrenDelegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return ListTile( title: Text(_itemList[index]), ); }, childCount: _itemList.length, ), ), ), ); } }
في هذا المثال، يتم استخدام _itemList لإنشاء قائمة من النصوص. يتم استخدام ListView.custom لإنشاء ListView مخصص. يتم استخدام SliverChildBuilderDelegate لتحديد كيفية بناء القائمة. تم تحديد childCount بناءً على طول المصفوفة _itemList. تم إنشاء ListTile لكل عنصر في _itemList. تم تعيين title لعرض النص في كل ListTile.
“اقرأ أيضاً: شرح استخدام ويدجت RadioListTile في فلاتر“
ListView.custom هو عنصر واجهة المستخدم في Flutter يستخدم لإنشاء قائمة مخصصة بشكل كامل. يتيح ListView.custom للمطورين تحديد تفاصيل العرض والمظهر بشكل كامل، بدءًا من عدد العناصر وحتى تخصيص واجهة كل عنصر من القائمة. تتوفر لـ ListView.custom العديد من الخصائص التي يمكن استخدامها لتخصيص قائمة المستخدم بشكل كامل، بما في ذلك childrenDelegate و cacheExtent و semanticChildCount و itemExtent. باستخدام ListView.custom، يمكن للمطورين إنشاء قوائم مخصصة بشكل كامل وتحسين الأداء والتخفيف من احتياجات الذاكرة للقائمة.