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:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user