0%
قائمة المهام — الفصل 58

الفصل 58 — قائمة المهام

الجزء 1C — ثمانية مشاريع مصغّرة · الفصل 58 من 62 · 12 ساعة

الفصل 58 — قائمة المهام

المستوى: متوسط المدة المقدّرة: 12 ساعة المتطلبات السابقة: الجزء 1A (الفصول من 01 إلى 18)، والجزء 1B (الفصول من 43 إلى 54)، والمشاريع 55 و56 و57 ما ستتمكن من فعله في النهاية: بناء تطبيق كامل لإدارة المهام من البداية إلى النهاية — نموذج بيانات قابل للتسلسل، ومستودع بيانات قابل للاستبدال، وقائمة قابلة للتصفية والفرز والبحث، ونموذج إدخال مع تحقق من صحة المدخلات، وحذف يمكن التراجع عنه، وحالة مركزية باستخدام provider، وحفظ دائم على القرص، واختبارات آلية.


58.0 — أهداف الفصل

في نهاية هذا الفصل، ستكون قادرًا على:

  • نمذجة مهمة باستخدام فئة Dart مزوّدة بـ enum للأولوية، وموعد نهائي من النوع DateTime، ووسوم؛
  • كتابة fromJson وtoJson لهذا النموذج (مراجعة للفصل 17)؛
  • كتابة دالة copyWith صحيحة، بما في ذلك للحقول التي تقبل القيمة الفارغة (nullable)؛
  • تعريف واجهة للمستودع (repository) وتقديم ثلاثة تنفيذات لها؛
  • عرض مجموعة عناصر باستخدام ListView.builder (مراجعة للفصل 48)؛
  • العناية بالحالة الفارغة للشاشة؛
  • وضع علامة على المهمة وشطب عنوانها باستخدام TextDecoration.lineThrough؛
  • إضافة مهمة عبر مربع حوار showDialog (مراجعة للفصل 49)؛
  • بناء نموذج إدخال كامل باستخدام Form وTextFormField وvalidator؛
  • إعادة استخدام النموذج نفسه للإنشاء والتعديل؛
  • الحذف بالسحب باستخدام Dismissible وفهم سبب كون Key إلزاميًا؛
  • إتاحة التراجع عن الحذف عبر SnackBar وSnackBarAction؛
  • تصفية قائمة باستخدام where (مراجعة للفصل 14)؛
  • الفرز حسب الموعد النهائي أو الأولوية مع معالجة القيم الفارغة معالجة سليمة؛
  • ربط شريط بحث بالقائمة؛
  • عرض عدّادات وLinearProgressIndicator لتقدّم الإنجاز؛
  • اختيار تاريخ باستخدام showDatePicker؛
  • تنسيق التاريخ بالفرنسية باستخدام الحزمة intl؛
  • إبراز المهام المتأخرة؛
  • استخراج الحالة كلها إلى ChangeNotifier يُوفَّر عبر provider (مراجعة للفصل 52)؛
  • حفظ المهام باستخدام shared_preferences (مراجعة للفصل 54)؛
  • كتابة آلية الحفظ نفسها باستخدام sqflite ومقارنة الطريقتين؛
  • إضافة وضع داكن قابل للتبديل ومحفوظ؛
  • كتابة اختبارات وحدة لمنطق التصفية والفرز.

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!