// food_navigation.dart — تشغيل ملاحة سيرو الداخلية لمهام التوصيل // // لماذا النسخة نفسها (بلا tag) لا نسخة مستقلة للتوصيل: // خطّ تحديث الموقع المركزي في LocationController يُغذّي نسخة واحدة فقط // (Get.find بلا وسم). نسخة موسومة للتوصيل ستُحرم من // تحديثات الموقع فلا تعمل الملاحة أصلاً، وتغذيتها يستلزم تعديل مسار الموقع // وهو المسار الأخطر في التطبيق. فنستعمل النسخة المشتركة، ونعالج التضارب // الوحيد الممكن (سائق في ملاحة رحلة ثم يفتح مهمة توصيل) بسؤاله صراحةً // بدل استبدال مساره صامتاً. import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:intaleq_maps/intaleq_maps.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../views/widgets/error_snakbar.dart'; import '../home/navigation/navigation_controller.dart'; import '../home/navigation/navigation_view.dart'; class FoodNavigation { /// يفتح ملاحة سيرو إلى [lat]/[lng]. يعيد false إذا ألغى السائق الاستبدال. static Future startInApp({ required double lat, required double lng, required String title, }) async { final controller = Get.isRegistered() ? Get.find() : Get.put(NavigationController()); if (controller.isNavigating) { final replace = await Get.dialog( AlertDialog( title: const Text('ملاحة نشطة'), content: Text('لديك ملاحة جارية. هل تستبدلها بالوجهة الجديدة؟\n$title'), actions: [ TextButton(onPressed: () => Get.back(result: false), child: const Text('إبقاء الحالية')), TextButton(onPressed: () => Get.back(result: true), child: const Text('استبدال')), ], ), ); if (replace != true) return false; } Get.to(() => const NavigationView()); await controller.startNavigationTo(LatLng(lat, lng), infoWindowTitle: title); return true; } /// خيار ثانوي لمن يفضّل جوجل — نفس ما يتيحه تدفّق الرحلات. /// لا نمرّر في الرابط سوى الإحداثيات: لا اسم زبون ولا رقم طلب. static Future startExternal(double lat, double lng) async { final nav = Uri.parse('google.navigation:q=$lat,$lng'); if (await canLaunchUrl(nav)) { await launchUrl(nav); return; } final web = Uri.parse('https://www.google.com/maps/dir/?api=1&destination=$lat,$lng'); if (!await launchUrl(web, mode: LaunchMode.externalApplication)) { mySnackbarWarning('تعذّر فتح تطبيق الخرائط'); } } }