MOB
تطبيقات الموبايل
شاشات Android/iOS وتصدير مشروع Compose/SwiftUI يتبني فعلًا.
0/100ابنِ تطبيق مهام: قائمة وتفاصيل وإعدادات، تخزين محلي، API وهمي، إذن إشعارات وحالة من غير نت — وصدّره Kotlin/Compose حقيقي.
- 1. تشريح
- 2. ابنِ الشاشات
- 3. شغّل وتتبّع
- 4. اكسر وأصلح
- 5. التحدي
- 6. صدّر
تشريح: اكتب مهمة ودوس + على الموبايل، وبص على السجل: إيه اللي اتنفّذ؟
الموبايل
foreground · طولي · أونلاين 400ms
Tasks
No tasks yet
- ⚠ add: icon button without an accessibility label — TalkBack only says "Button"
app.json
✓ بيتبني
السجل (دورة الحياة والنظام)
- 0.0s cold start (process 1)
- 0.0s onCreate
- 0.0s onStart
- 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)

