feat(tactical-app): full sovereign military suite in Flutter with first-run onboarding, artillery ballistics, HLZ assessment, minefield breach, isochrone, symbols, and overlays

This commit is contained in:
Hamza-Ayed
2026-08-22 15:24:09 +03:00
parent c10fd2396c
commit 5e3be672ee
23 changed files with 4096 additions and 1028 deletions
@@ -9,7 +9,13 @@ class TacticalDrawer extends StatefulWidget {
final VoidCallback onOpenResectionHud;
final VoidCallback onStartRoutingMode;
final VoidCallback onStartLosMode;
final VoidCallback onStartViewshedMode;
final VoidCallback onStartIsochroneMode;
final VoidCallback onStartArtilleryMode;
final VoidCallback onStartHlzMode;
final VoidCallback onStartMinefieldMode;
final VoidCallback onStartSymbolsMode;
final VoidCallback onStartOverlaysMode;
final VoidCallback onLandmarksSynced;
final bool showContours;
final Function(bool) onToggleContours;
@@ -21,7 +27,13 @@ class TacticalDrawer extends StatefulWidget {
required this.onOpenResectionHud,
required this.onStartRoutingMode,
required this.onStartLosMode,
required this.onStartViewshedMode,
required this.onStartIsochroneMode,
required this.onStartArtilleryMode,
required this.onStartHlzMode,
required this.onStartMinefieldMode,
required this.onStartSymbolsMode,
required this.onStartOverlaysMode,
required this.onLandmarksSynced,
this.showContours = true,
required this.onToggleContours,
@@ -102,7 +114,7 @@ class _TacticalDrawerState extends State<TacticalDrawer> {
child: ListView(
padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12),
children: [
// 1. Angle Unit Selector (نظام الزوايا: الدرجات والميل العسكري)
// 1. Angle Unit Selector
Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
@@ -166,7 +178,7 @@ class _TacticalDrawerState extends State<TacticalDrawer> {
),
),
// 2. Visual Resection Launch
// 2. Visual Resection
_buildOperationTile(
icon: Icons.camera_alt,
iconColor: const Color(0xFF00F0FF),
@@ -178,42 +190,114 @@ class _TacticalDrawerState extends State<TacticalDrawer> {
},
),
// 3. Tactical Routing Engine (100% On-Device)
_buildOperationTile(
icon: Icons.alt_route,
iconColor: const Color(0xFF38BDF8),
title: 'محرك التوجيه وقوافل الإمداد (On-Device)',
subtitle: 'توجيه وحساب مسارات محلياً بدون إنترنت وسيرفر',
onTap: () {
Navigator.pop(context);
widget.onStartRoutingMode();
},
),
// 4. Line-of-Sight & Intervisibility
// 3. Line-of-Sight & Intervisibility (LOS)
_buildOperationTile(
icon: Icons.remove_red_eye,
iconColor: const Color(0xFFF59E0B),
title: 'تبادل الرؤية والمراقبة (LOS)',
subtitle: 'كشف النقاط الميتة وقطاع الرصد الميداني',
subtitle: 'المقطع التضاريسي وكشف النقاط الميتة بالأقمار',
onTap: () {
Navigator.pop(context);
widget.onStartLosMode();
},
),
// 5. Isochrone Reachability
// 4. 360° Viewshed Radar
_buildOperationTile(
icon: Icons.radar,
iconColor: const Color(0xFF00F0FF),
title: 'رادار الرصد الدائري (360° Viewshed)',
subtitle: 'مضلع التغطية البصرية ومساحة الرصد بالكيلومتر²',
onTap: () {
Navigator.pop(context);
widget.onStartViewshedMode();
},
),
// 5. Artillery Fire Mission Ballistics
_buildOperationTile(
icon: Icons.gps_fixed,
iconColor: const Color(0xFFEF4444),
title: 'رماية المدفعية وقوس القذيفة (Fire Mission)',
subtitle: 'حلول الرماية البالستية وسلامة قمم الجبال',
onTap: () {
Navigator.pop(context);
widget.onStartArtilleryMode();
},
),
// 6. Helicopter Landing Zones (HLZ)
_buildOperationTile(
icon: Icons.flight_land,
iconColor: const Color(0xFF10B981),
title: 'مهابط الطيران العامودي (HLZ)',
subtitle: 'فحص ميول الأرض والعوائق وممرات الاقتراب',
onTap: () {
Navigator.pop(context);
widget.onStartHlzMode();
},
),
// 7. Minefield & Breaching Lanes
_buildOperationTile(
icon: Icons.warning_amber,
iconColor: const Color(0xFFF59E0B),
title: 'حقول الألغام وممرات العبور (Minefield)',
subtitle: 'تحديد نطاق الخطر وتخطيط ثغرات العبور الآمن',
onTap: () {
Navigator.pop(context);
widget.onStartMinefieldMode();
},
),
// 8. Isochrone Reachability
_buildOperationTile(
icon: Icons.timelapse,
iconColor: const Color(0xFFA855F7),
title: 'مضلعات الوصول ونطاق الحركة (Isochrone)',
subtitle: 'نطاق استجابة الإسعاف والدفاع والتدخل السريع',
title: 'نطاق التدخل السريع (QRF Isochrone)',
subtitle: 'مضلعات زمن الاستجابة 5 و 10 و 15 دقيقة',
onTap: () {
Navigator.pop(context);
widget.onStartIsochroneMode();
},
),
// 9. Tactical Symbols & Formations
_buildOperationTile(
icon: Icons.military_tech,
iconColor: const Color(0xFF38BDF8),
title: 'الرموز والتشكيلات العسكرية (Symbols)',
subtitle: 'رموز NATO و Mil-Std-2525C القياسية',
onTap: () {
Navigator.pop(context);
widget.onStartSymbolsMode();
},
),
// 10. Tactical Overlays (IPB)
_buildOperationTile(
icon: Icons.layers,
iconColor: const Color(0xFF38BDF8),
title: 'منظومة الشفافات العسكرية (Overlays)',
subtitle: 'طبقات دراسة أرض المعركة IPB ومحاور التقدم',
onTap: () {
Navigator.pop(context);
widget.onStartOverlaysMode();
},
),
// 11. Tactical Routing Engine
_buildOperationTile(
icon: Icons.alt_route,
iconColor: const Color(0xFF38BDF8),
title: 'محرك التوجيه وقوافل الإمداد (Routing)',
subtitle: 'توجيه وحساب مسارات محلياً بدون إنترنت',
onTap: () {
Navigator.pop(context);
widget.onStartRoutingMode();
},
),
const SizedBox(height: 14),
const Padding(
@@ -224,7 +308,7 @@ class _TacticalDrawerState extends State<TacticalDrawer> {
),
),
// 6. Topographic Contour Lines (خطوط الكنتور الطبوغرافية)
// Topographic Contour Lines
Container(
margin: const EdgeInsets.symmetric(vertical: 4),
decoration: BoxDecoration(
@@ -244,7 +328,7 @@ class _TacticalDrawerState extends State<TacticalDrawer> {
child: const Icon(Icons.terrain, color: Color(0xFFF59E0B), size: 20),
),
title: const Text(
'خطوط الكنتور الطبوغرافية (Topographic Contours)',
'خطوط الكنتور الطبوغرافية (Contours)',
style: TextStyle(color: Colors.white, fontSize: 12, fontWeight: FontWeight.bold),
),
subtitle: const Text(
@@ -256,7 +340,7 @@ class _TacticalDrawerState extends State<TacticalDrawer> {
),
),
// 7. Offline Jordan Package & Sync Manager
// Offline Jordan Package & Sync Manager
Container(
margin: const EdgeInsets.symmetric(vertical: 4),
decoration: BoxDecoration(
@@ -278,7 +362,7 @@ class _TacticalDrawerState extends State<TacticalDrawer> {
style: const TextStyle(color: Colors.white, fontSize: 12, fontWeight: FontWeight.bold),
),
subtitle: const Text(
'مزامنة معالم PostGIS وشبكة التوجيه (825 KB)',
'مزامنة معالم PostGIS وشبكة التوجيه والـ DEM',
style: TextStyle(color: Color(0xFF94A3B8), fontSize: 10),
),
trailing: const Icon(Icons.chevron_left, color: Colors.white30, size: 18),