تخطَّ إلى المحتوى
MOB

تطبيقات الموبايل

0/100ابنِ تطبيق مهام: قائمة وتفاصيل وإعدادات، تخزين محلي، API وهمي، إذن إشعارات وحالة من غير نت — وصدّره Kotlin/Compose حقيقي.
  1. 1. تشريح
  2. 2. ابنِ الشاشات
  3. 3. شغّل وتتبّع
  4. 4. اكسر وأصلح
  5. 5. التحدي
  6. 6. صدّر
تشريح: اكتب مهمة ودوس + على الموبايل، وبص على السجل: إيه اللي اتنفّذ؟

الموبايل

foreground · طولي · أونلاين 400ms
Tasks
No tasks yet
  • ⚠ add: icon button without an accessibility label — TalkBack only says "Button"

app.json

✓ بيتبني

السجل (دورة الحياة والنظام)

  1. 0.0s cold start (process 1)
  2. 0.0s onCreate
  3. 0.0s onStart
  4. 0.0s onResume
الحالة جوه التطبيق (الـ ViewModel) والقرص
{
 "state": {
  "draft": "",
  "tasks": []
 },
 "nav": [
  "list"
 ],
 "disk": null,
 "listeners": []
}

عقد السلوك (أندرويد + iOS)

18 سيناريو × منصتين — لسه ما شغّلتش على النسخة دي.

التشخيص واكسر وأصلح

  • [تشغيل] النص المكتوب محفوظ في حالة الشاشة (remember) مش في الـ ViewModel
    على أندرويد: تدوير الشاشة بيعيد إنشاء الـ Activity والكلام اللي اتكتب بيضيع (iOS مابيتأثرش)
    الحل: خلّي holder للحقل "model" (ViewModel / rememberSaveable)
  • [تشغيل] النسخ الاحتياطي شغال على الخيط الرئيسي
    الواجهة بتتجمد ثانية ونص؛ على أندرويد لو طال: ANR
    الحل: خلّي work بـ background: true (Dispatchers.IO / Task.detached)
  • [منطق] إضافة مهمة مابتحفظش على القرص
    كله تمام لحد ما النظام يقفل العملية — بعدها المهام بتختفي
    الحل: ضيف save بعد add
  • [منطق] زرار الإضافة مش بيتحقق من النص
    مهام فاضية (مسافات) بتتضاف للقائمة
    الحل: لفّ add في if trim(draft) != "" ورسالة في else
  • [منطق] طلب إذن الإشعارات مالوش مسار لو المستخدم رفض
    الزرار مابيعملش أي حاجة بعد الرفض والمستخدم مش فاهم ليه
    الحل: ضيف denied بأكشن يشرح يفعّلها من الإعدادات
  • [بيئة] طلب المزامنة مالوش معالجة للفشل
    من غير نت: مؤشر التحميل بيلف للأبد ومفيش رسالة
    الحل: ضيف error بأكشن يوقف التحميل ويعرض رسالة
  • [بيئة] شاشة القائمة مرسومة edge-to-edge من غير safe area
    العنوان تحت النوتش / شريط الحالة على الأجهزة الحديثة
    الحل: شيل safeArea: false (أو استخدم WindowInsets / safeAreaInset)
  • [بيئة] صف الزراير بعرض ثابت أكبر من الشاشات الصغيرة
    على iPhone SE / تليفون 360dp آخر زرار مقصوص
    الحل: شيل widths الثابتة وخليها تتمدد
  • [بيئة] زرار الأيقونة (+) من غير اسم لقارئ الشاشة
    VoiceOver / TalkBack بيقول "Button" بس — المستخدم الكفيف مش عارف يضيف مهمة
    الحل: ضيف a11y: "Add task" (contentDescription / accessibilityLabel)

صدّر لمشروع حقيقي