جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
نظم التشغيل 2 - المعمل 6
ListView، ومعمارية الواجهةجعل الواجهة تتفاعل مع البيانات، والتخطيط لتطبيقات متعددة الشاشات، وعرض القوائم الديناميكية
setState لطلب إعادة البناءsetState(() {
userAge = calculateAge(birthDate, today);
});StatelessWidget | StatefulWidget | |
|---|---|---|
| هل يمكنه إعادة بناء نفسه؟ | لا | نعم |
هل يملك setState؟ | لا | نعم |
| متى يستخدم | الواجهة لا تتغير أبدا بعد أول بناء | الواجهة تتغير بسبب إدخال المستخدم أو بيانات جديدة |
setStateclass _AgeResultWidgetState extends State<AgeResultWidget> {
UserAge? userAge;
@override
Widget build(BuildContext context) {
return Text('Years: ${userAge?.years ?? 0}');
}
}DateTime.toString() الافتراضي غير سهل القراءة للمستخدمintl، ثم نسق باستخدام DateFormatString formatted = DateFormat('d/M/yyyy').format(myDate);
// "5/3/2025"تصفح الدورات
فتح دورة
رؤية الوحدات
رؤية الدروس
عرض صفحات الدرس
Column | ListView | |
|---|---|---|
| التمرير | لا يوجد تمرير مدمج | يمرر تلقائيا |
| الاستخدام الأنسب | العناصر تلائم الشاشة دائما | العناصر قد تفيض أو تأتي من بيانات ديناميكية |
ListView() قائمة children ثابتة - الأفضل لعدد صغير ومعروف من العناصرListView(
children: [
Container(height: 60, child: Text('Item 1')),
Container(height: 60, child: Text('Item 2')),
],
)| المعامل | الوصف |
|---|---|
itemCount | العدد الإجمالي للعناصر |
itemBuilder | دالة تستدعى مرة واحدة لكل عنصر مرئي؛ تستقبل context وindex |
ListView.builder(
itemCount: courses.length,
itemBuilder: (context, index) => CourseCard(course: courses[index]),
)ListView.separated دالة separatorBuilder بين العناصر، مثل DividerscrollDirection: Axis.horizontal لقائمة تمرر أفقيااستدعاء setState في الأب
تعاد بناء الشاشة الأب بأكملها
الرأس والقائمة والتذييل تعاد بناؤها معا
استدعاء setState الخاص بالرأس فقط
يعاد بناء ذلك العنصر وحده
الشاشة الأب وبقية العناصر بلا إعادة بناء
setStateStatelessWidget بناء نفسه أبدا؛ بينما يفعل StatefulWidget ذلك، عبر setStateintl التواريخ بشكل نظيف - غلفها داخل صنف أداة صغيرListView.builder العناصر المرئية فقط بشكل كسول - وهو الخيار القياسي للقوائم الديناميكية أو الكبيرةMahmoud Abas|المعمل 06: إدارة الحالة، قوائم ListView، ومعمارية الواجهة