Update Saqel Platform: 2026-09-10 12:26:22

This commit is contained in:
Hamza-Ayed
2026-09-10 12:32:01 +03:00
parent 09dfd665b5
commit 960d4c8604
28 changed files with 690 additions and 2864 deletions
@@ -83,7 +83,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
),
const SizedBox(width: 6),
Text(
dir['name'] ?? 'مديرية الثقافة العسكرية',
dir['name']?.toString() ?? 'مديرية غير محددة',
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w800,
@@ -93,7 +93,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
),
const SizedBox(height: 2),
const Text(
'لوحة القائد الأعلى للرقابة والسيادة الرقمية (43 مدرسة في المملكة)',
'تعرض البيانات المتاحة ضمن نطاق صلاحيات الحساب.',
style: TextStyle(fontSize: 12, color: Color(0xFF94A3B8)),
),
],
@@ -163,7 +163,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
Expanded(
child: _kpiCell(
'إجمالي المدارس',
'${dir['total_schools'] ?? 43} مدرسة',
'${dir['total_schools'] ?? 'غير متاح'} مدرسة',
CupertinoIcons.building_2_fill,
const Color(0xFF818CF8),
),
@@ -171,7 +171,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
Expanded(
child: _kpiCell(
'الطلبة المسجلون',
'${dir['total_students'] ?? 19350}',
'${dir['total_students'] ?? 'غير متاح'}',
CupertinoIcons.person_3_fill,
const Color(0xFF38BDF8),
),
@@ -184,7 +184,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
Expanded(
child: _kpiCell(
'معلمو الثقافة العسكرية',
'${dir['total_teachers'] ?? 812} معلم',
'${dir['total_teachers'] ?? 'غير متاح'} معلم',
CupertinoIcons.person_badge_plus_fill,
const Color(0xFFFBBF24),
),
@@ -192,7 +192,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
Expanded(
child: _kpiCell(
'نسبة كوتة الحصص',
'${dir['compliance_rate'] ?? 94.5}%',
dir['compliance_rate'] == null ? 'غير متاح' : '${dir['compliance_rate']}%',
CupertinoIcons.check_mark_circled_solid,
const Color(0xFF34D399),
),
@@ -209,14 +209,14 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
'توزيع مدارس الثقافة العسكرية الـ 43 حسب تصنيف الوزن:',
'المدارس ضمن النطاق:',
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w700,
color: Colors.white),
),
Text(
'إجمالي العقد: 20,000 د.أ',
const Text(
'القيمة التعاقدية غير معروضة',
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w700,
@@ -325,7 +325,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
// Monetization Model Header
// Revenue and teacher ranking cannot be inferred without a verified ledger.
Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
@@ -347,7 +347,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
color: Color(0xFF4ADE80), size: 22),
SizedBox(width: 8),
Text(
'سوق تسييل المعلمين المتميزين (شراكة الأرباح)',
'بيانات المعلمين المتاحة',
style: TextStyle(
fontSize: 14.5,
fontWeight: FontWeight.w700,
@@ -357,7 +357,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
),
const SizedBox(height: 8),
const Text(
'المعلمون الحاصلون على تقييم 95%+ يتم منحهم اعتماد "معلم صَقِل المعتمد" وتُباع شروحاتهم خارج الثقافة العسكرية مع توزيع العائد: 55% للمعلم، 15% للمديرية، 30% لصَقِل.',
'لا توجد سياسة دخل أو اعتماد معلّم منشورة في هذه الشاشة. لا يظهر ترتيب إلا إذا أعاده الخادم بدليل موثق.',
style: TextStyle(
fontSize: 12.5, color: Color(0xFFCBD5E1), height: 1.5),
),
@@ -368,12 +368,14 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
// Top Teachers List
const Text(
'🌟 أفضل المعلمين المرشحين للتسييل والاعتماد الرسمي:',
'المعلمون الذين أعادهم الخادم:',
style: TextStyle(
fontSize: 14, fontWeight: FontWeight.w700, color: Colors.white),
),
const SizedBox(height: 12),
...topTeachers.map((t) => Container(
if (topTeachers.isEmpty)
const Text('لا توجد بيانات ترتيب معلمين متاحة.', style: TextStyle(color: Color(0xFF94A3B8)))
else ...topTeachers.map((t) => Container(
margin: const EdgeInsets.only(bottom: 10),
padding: const EdgeInsets.all(14),
decoration: BoxDecoration(
@@ -419,7 +421,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
borderRadius: BorderRadius.circular(6),
),
child: Text(
'${t['score']}% تقييم AI',
'${t['score'] ?? 'غير متاح'}',
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.w800,
@@ -433,12 +435,14 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
// Early Intervention Radar
const Text(
'⚠️ رادار الإنذار والتوجيه المبكر (معالجة القصور قبل التوجيهي):',
'حالات الدعم التي أعادها الخادم:',
style: TextStyle(
fontSize: 14, fontWeight: FontWeight.w700, color: Colors.white),
),
const SizedBox(height: 12),
...needingSupport.map((ns) => Container(
if (needingSupport.isEmpty)
const Text('لا توجد بيانات دعم متاحة.', style: TextStyle(color: Color(0xFF94A3B8)))
else ...needingSupport.map((ns) => Container(
margin: const EdgeInsets.only(bottom: 10),
padding: const EdgeInsets.all(14),
decoration: BoxDecoration(
@@ -532,7 +536,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
),
const SizedBox(height: 8),
const Text(
'مراقبة لحظية لنحو 19,000 طالب يخوضون الامتحان الموحد المتزامن عبر 43 مدرسة، برصد فوري للسرعة المستحيلة وتكتل الأخطاء.',
'تظهر هنا فقط الشذوذات التي سجلها الخادم من جلسات امتحان فعلية ضمن نطاق الحساب.',
style: TextStyle(
fontSize: 12.5, color: Color(0xFF94A3B8), height: 1.5),
),
@@ -556,12 +560,7 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
borderRadius: BorderRadius.circular(14),
border: Border.all(color: const Color(0xFF1E293B)),
),
child: const Center(
child: Text(
'✅ لا توجد أي تنبيهات شذوذ حالياً · كافة المدارس تعمل بانضباط تام',
style: TextStyle(color: Color(0xFF10B981), fontSize: 13.5),
),
),
child: const Center(child: Text('لا توجد سجلات شذوذ متاحة من الخادم.', style: TextStyle(color: Color(0xFF94A3B8), fontSize: 13.5))),
)
else
...anomalies.map((anm) => Container(
@@ -613,19 +612,11 @@ class _DirectorateCommandScreenState extends State<DirectorateCommandScreen>
),
const SizedBox(height: 12),
ElevatedButton.icon(
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text(
'🎥 جاري فتح العينة البانورامية المسجلة (16.5 MB) لتلك الدقيقة للتحقق البصري المباشر'),
backgroundColor: Color(0xFF0284C7),
),
);
},
onPressed: null,
icon: const Icon(CupertinoIcons.play_circle_fill,
size: 16),
label: const Text(
'عرض العينة البانورامية المسجلة في هذه الدقيقة 👁️',
'عرض العينة غير متاح من هذه الشاشة',
style: TextStyle(fontSize: 12.5),
),
style: ElevatedButton.styleFrom(
File diff suppressed because it is too large Load Diff