الفصل 59 — اختبار المعلومات
الجزء 1C — ثمانية مشاريع مصغّرة · الفصل 59 من 62 · 12 ساعة
الفصل 59 — اختبار المعلومات (Quiz)
المستوى: متوسط المدة المقدّرة: 12 ساعة المتطلبات المسبقة: الجزء 1A (الفصول من 01 إلى 18)، والجزء 1B (الفصول من 43 إلى 54)، والمشاريع من 55 إلى 58 ما ستكون قادرًا على فعله في النهاية: بناء تطبيق اختبار معلومات متكامل — بنك أسئلة بصيغة JSON مضمّن في الأصول (assets)، وتحميل غير متزامن، ومحرك اختبار خالص وقابل للاختبار، وعدّاد تنازلي لكل سؤال، وتغذية راجعة بصرية فورية، وانتقالات متحركة، وشاشة نتيجة مفصّلة، وأفضل نتيجة محفوظة، واختبارات آلية.
59.0 — أهداف الفصل
في نهاية هذا الفصل، ستكون قادرًا على:
- نمذجة سؤال متعدد الخيارات باستخدام
enumللصعوبة (مراجعة للفصل 11)؛ - كتابة
fromJsonدفاعي يرفض أي سؤال سيئ التكوين (مراجعة للفصلين 13 و17)؛ - تخزين بنك الأسئلة بصيغة JSON ضمن الأصول (assets) والتصريح عنه في
pubspec.yaml(مراجعة للفصل 47)؛ - تحميل أصل نصي بشكل غير متزامن باستخدام
rootBundle.loadString(مراجعة للفصل 15)؛ - كتابة محرك الاختبار على شكل فئة خالصة لا تعتمد إطلاقًا على Flutter؛
- عرض شاشة استقبال تتيح اختيار الفئة وعدد الأسئلة؛
- بناء شاشة سؤال مقروءة وقابلة لإعادة الاستخدام؛
- كتابة زر إجابة يتغير مظهره بحسب خمس حالات؛
- تقديم تغذية راجعة بصرية فورية، خضراء أو حمراء، دون حجب الواجهة أبدًا؛
- عرض شرح بعد كل إجابة؛
- تحريك شريط التقدم باستخدام
TweenAnimationBuilder؛ - إدارة عدّاد تنازلي لكل سؤال باستخدام
Timer.periodic(مراجعة للفصل 45)؛ - معاملة انتهاء الوقت على أنه إجابة قائمة بذاتها؛
- التنقل بين الأسئلة بانتقال
AnimatedSwitcher؛ - خلط الأسئلة والإجابات باستخدام
shuffle، وجعل هذا الخلط قابلًا للاختبار؛ - بناء شاشة نتيجة برسالة تناسب الدرجة المحققة؛
- عرض ملخص لكل سؤال على حدة؛
- حفظ أفضل نتيجة لكل فئة باستخدام
shared_preferences(مراجعة للفصل 54)؛ - نقل الحالة كلها، بما فيها المؤقّت، إلى
ChangeNotifierيوفّرهprovider(مراجعة للفصل 52)؛ - جعل التطبيق قابلًا للاستخدام مع قارئ الشاشة وسليمًا في الوضع الداكن (مراجعة للفصل 51)؛
- كتابة اختبارات وحدة لمنطق احتساب النتيجة ولعملية الخلط.
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش