Files
tripz-llc/apps/driver/lib/controller/food_delivery/food_navigation.dart
T
2026-08-09 16:56:13 +03:00

63 lines
3.0 KiB
Dart

// food_navigation.dart — تشغيل ملاحة سيرو الداخلية لمهام التوصيل
//
// لماذا النسخة نفسها (بلا tag) لا نسخة مستقلة للتوصيل:
// خطّ تحديث الموقع المركزي في LocationController يُغذّي نسخة واحدة فقط
// (Get.find<NavigationController> بلا وسم). نسخة موسومة للتوصيل ستُحرم من
// تحديثات الموقع فلا تعمل الملاحة أصلاً، وتغذيتها يستلزم تعديل مسار الموقع
// وهو المسار الأخطر في التطبيق. فنستعمل النسخة المشتركة، ونعالج التضارب
// الوحيد الممكن (سائق في ملاحة رحلة ثم يفتح مهمة توصيل) بسؤاله صراحةً
// بدل استبدال مساره صامتاً.
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<bool> startInApp({
required double lat,
required double lng,
required String title,
}) async {
final controller = Get.isRegistered<NavigationController>()
? Get.find<NavigationController>()
: Get.put(NavigationController());
if (controller.isNavigating) {
final replace = await Get.dialog<bool>(
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<void> 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('تعذّر فتح تطبيق الخرائط');
}
}
}