diff --git a/siro_driver/lib/constant/country_polygons.dart b/siro_driver/lib/constant/country_polygons.dart index 68ef7f54..ab693151 100644 --- a/siro_driver/lib/constant/country_polygons.dart +++ b/siro_driver/lib/constant/country_polygons.dart @@ -4,92 +4,67 @@ import 'package:intaleq_maps/intaleq_maps.dart'; class CountryPolygons { // ========================================================== - // 1. الأردن: تغطية الممر الحضري الرئيسي (من إربد شمالاً حتى العقبة جنوباً) - // حوالي 12 نقطة + // 1. الأردن: عمان، الزرقاء، إربد، السلط ومساحة كبيرة داخل الأردن // ========================================================== static final List jordanBoundary = [ - // شمال إربد (قرب الحدود) - const LatLng(32.65, 35.80), - // شمال شرق المفرق - const LatLng(32.35, 37.00), - // شرق الزرقاء / الأزرق - const LatLng(31.85, 36.80), - // جنوب شرق (نهاية الزحف السكاني) - const LatLng(31.00, 36.50), - // جنوب / معان - const LatLng(30.30, 35.75), - // العقبة - const LatLng(29.50, 35.00), - // البحر الأحمر / الحدود الغربية - const LatLng(29.50, 34.85), - // غرب وادي عربة - const LatLng(30.80, 35.25), - // منطقة البحر الميت / السلط - const LatLng(32.00, 35.50), - // العودة عبر وادي الأردن إلى الشمال - const LatLng(32.45, 35.60), - // العودة لنقطة إربد - const LatLng(32.65, 35.80), + const LatLng(32.70, 35.80), // شمال إربد + const LatLng(32.35, 36.30), // المفرق + const LatLng(32.10, 36.30), // الزرقاء + const LatLng(31.85, 36.20), // شرق عمان + const LatLng(31.50, 36.00), // مادبا + const LatLng(30.80, 35.80), // الكرك / الطفيلة + const LatLng(30.20, 35.60), // معان + const LatLng(29.50, 35.00), // العقبة + const LatLng(29.50, 34.90), // الحدود الغربية للعقبة + const LatLng(30.50, 35.20), // وادي عربة + const LatLng(31.50, 35.50), // البحر الميت + const LatLng(32.05, 35.60), // السلط + const LatLng(32.70, 35.60), // غرب إربد ]; // ========================================================== - // 2. سوريا: تغطية الممر الغربي والساحلي (درعا، دمشق، حمص، حماة، حلب، الساحل) - // حوالي 14 نقطة + // 2. سوريا: دمشق، ريف دمشق، حمص، حلب، اللاذقية (استثناء الصحراء) // ========================================================== static final List syriaBoundary = [ - // درعا / الجنوب - const LatLng(32.65, 35.95), - // شرق السويداء (حدود المنطقة المأهولة) - const LatLng(32.85, 37.10), - // أطراف دمشق الشرقية - const LatLng(33.50, 36.65), - // تدمر (أقصى امتداد شرقي للمضلع) - const LatLng(34.50, 38.30), - // الرقة (شمال شرق) - const LatLng(35.95, 38.80), - // حلب (الشمال) - const LatLng(36.45, 37.15), - // الحدود الشمالية الغربية (إدلب / تركيا) - const LatLng(36.50, 36.50), - // اللاذقية (الساحل) - const LatLng(35.50, 35.75), - // طرطوس (الساحل) - const LatLng(34.80, 35.85), - // حمص - const LatLng(34.70, 36.70), - // حماة - const LatLng(35.10, 36.70), - // العودة إلى منطقة دمشق - const LatLng(33.40, 36.30), - // العودة إلى درعا - const LatLng(32.65, 35.95), + const LatLng(32.60, 36.00), // درعا + const LatLng(32.70, 36.60), // السويداء + const LatLng(33.50, 36.50), // ريف دمشق الشرقي + const LatLng(34.10, 36.80), // النبك + const LatLng(34.70, 36.80), // حمص + const LatLng(35.10, 36.80), // حماة + const LatLng(36.20, 37.30), // حلب الشرقية + const LatLng(36.60, 37.00), // شمال حلب + const LatLng(36.00, 36.00), // إدلب / الجبال + const LatLng(35.70, 35.80), // اللاذقية + const LatLng(34.80, 35.80), // طرطوس + const LatLng(34.50, 36.20), // تلكلخ + const LatLng(33.50, 36.00), // دمشق الغربية ]; // ========================================================== - // 3. مصر: تغطية القاهرة الكبرى، الدلتا، والإسكندرية والإسماعيلية - // حوالي 10 نقاط + // 3. مصر: القاهرة كاملة، الإسكندرية، ومراكز المحافظات // ========================================================== static final List egyptBoundary = [ - // جنوب الفيوم (أقصى امتداد جنوبي غربي) - const LatLng(29.20, 30.60), - // جنوب القاهرة (العياط) - const LatLng(29.80, 31.30), - // شرق السويس - const LatLng(29.95, 32.70), - // الإسماعيلية / القناة - const LatLng(30.60, 32.25), - // بورسعيد / أطراف الدلتا الشمالية الشرقية - const LatLng(31.30, 31.80), - // دمياط / ساحل الدلتا - const LatLng(31.50, 31.25), - // الإسكندرية (أقصى الشمال الغربي) - const LatLng(31.20, 29.80), - // غرب الدلتا - const LatLng(30.50, 30.20), - // العودة لنقطة البداية - const LatLng(29.20, 30.60), + const LatLng(29.50, 30.80), // جنوب الفيوم + const LatLng(29.80, 31.40), // شرق القاهرة الكبرى + const LatLng(30.10, 31.80), // العاشر من رمضان + const LatLng(30.60, 32.30), // الإسماعيلية + const LatLng(31.30, 31.80), // بورسعيد + const LatLng(31.50, 31.25), // دمياط + const LatLng(31.30, 29.80), // الإسكندرية + const LatLng(30.80, 29.80), // وادي النطرون + const LatLng(30.00, 30.80), // 6 أكتوبر / غرب القاهرة ]; + /// دالة للتحقق مما إذا كان الموقع ضمن نطاق الخدمة المدعوم + static bool isServiceSupported(LatLng? point) { + if (point == null) return false; + if (_isPointInPolygon(point, jordanBoundary)) return true; + if (_isPointInPolygon(point, syriaBoundary)) return true; + if (_isPointInPolygon(point, egyptBoundary)) return true; + return false; + } + // دالة تُرجع رابط API بناءً على اسم الدولة static String getRoutingApiUrl(String countryName) { switch (countryName) { @@ -104,4 +79,34 @@ class CountryPolygons { return 'https://routec.intaleq.xyz/route'; } } + + /// دالة تحدد اسم الدولة (باللغة الإنجليزية للـ API) بناءً على الإحداثيات + static String getCountryName(LatLng? point) { + if (point == null) return "unsupported"; + + if (_isPointInPolygon(point, jordanBoundary)) return "Jordan"; + if (_isPointInPolygon(point, syriaBoundary)) return "Syria"; + if (_isPointInPolygon(point, egyptBoundary)) return "Egypt"; + + return "unsupported"; + } + + /// خوارزمية Ray Casting للتحقق من وقوع نقطة داخل مضلع + static bool _isPointInPolygon(LatLng p, List polygon) { + bool isInside = false; + int j = polygon.length - 1; + for (int i = 0; i < polygon.length; i++) { + if (((polygon[i].latitude > p.latitude) != + (polygon[j].latitude > p.latitude)) && + (p.longitude < + (polygon[j].longitude - polygon[i].longitude) * + (p.latitude - polygon[i].latitude) / + (polygon[j].latitude - polygon[i].latitude) + + polygon[i].longitude)) { + isInside = !isInside; + } + j = i; + } + return isInside; + } } diff --git a/siro_driver/lib/controller/home/captin/home_captain_controller.dart b/siro_driver/lib/controller/home/captin/home_captain_controller.dart index 814e4687..c9bd7573 100755 --- a/siro_driver/lib/controller/home/captin/home_captain_controller.dart +++ b/siro_driver/lib/controller/home/captin/home_captain_controller.dart @@ -12,6 +12,7 @@ import 'dart:async'; import '../../../constant/links.dart'; import '../../../constant/style.dart'; import '../../../constant/table_names.dart'; +import '../../../constant/country_polygons.dart'; import '../../../main.dart'; import '../../../print.dart'; import '../../../views/home/my_wallet/walet_captain.dart'; @@ -724,6 +725,34 @@ class HomeCaptainController extends GetxController { myLocation = LatLng(locData.latitude!, locData.longitude!); print( "📍 [HomeCaptain] Location updated: ${myLocation.latitude}, ${myLocation.longitude}"); + + if (!CountryPolygons.isServiceSupported(myLocation)) { + Get.bottomSheet( + Container( + padding: const EdgeInsets.all(20), + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical(top: Radius.circular(20)), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.location_off, size: 60, color: Colors.redAccent), + const SizedBox(height: 15), + Text( + 'service_unavailable_area'.tr, + style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), + const SizedBox(height: 10), + ], + ), + ), + isDismissible: false, + enableDrag: false, + ); + } + } else { print( "⚠️ [HomeCaptain] Could not get current location, using default."); diff --git a/siro_driver/lib/controller/local/ar_eg.dart b/siro_driver/lib/controller/local/ar_eg.dart index 757a5ea2..4846563f 100644 --- a/siro_driver/lib/controller/local/ar_eg.dart +++ b/siro_driver/lib/controller/local/ar_eg.dart @@ -2676,4 +2676,5 @@ final Map ar_eg = { "Clear Destination": "مسح الوجهة", "Destination cleared!": "تم مسح الوجهة الشخصية!", "Move map to select destination": "حرك الخريطة لتحديد الوجهة الشخصية", + "service_unavailable_area": "هذه الخدمة غير متوفرة حالياً في منطقتك", }; diff --git a/siro_driver/lib/controller/local/ar_jo.dart b/siro_driver/lib/controller/local/ar_jo.dart index 5a7d6077..65cdbc21 100644 --- a/siro_driver/lib/controller/local/ar_jo.dart +++ b/siro_driver/lib/controller/local/ar_jo.dart @@ -2676,4 +2676,5 @@ final Map ar_jo = { "Clear Destination": "مسح الوجهة", "Destination cleared!": "تم مسح الوجهة الشخصية!", "Move map to select destination": "حرك الخريطة لتحديد الوجهة الشخصية", + "service_unavailable_area": "هذه الخدمة غير متوفرة حالياً في منطقتك", }; diff --git a/siro_driver/lib/controller/local/ar_sy.dart b/siro_driver/lib/controller/local/ar_sy.dart index 5d6a83a5..03dfcc2e 100644 --- a/siro_driver/lib/controller/local/ar_sy.dart +++ b/siro_driver/lib/controller/local/ar_sy.dart @@ -2678,4 +2678,5 @@ final Map ar_sy = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'وصلت لأعلى مستوى!", "💰 Pay with Wallet": "💰 ادفع من المحفظة", "💳 Pay with Credit Card": "💳 ادفع ببطاقة ائتمان", + "service_unavailable_area": "هذه الخدمة غير متوفرة حالياً في منطقتك", }; diff --git a/siro_driver/lib/controller/local/de.dart b/siro_driver/lib/controller/local/de.dart index 61451b5c..7eb15ed2 100644 --- a/siro_driver/lib/controller/local/de.dart +++ b/siro_driver/lib/controller/local/de.dart @@ -2659,4 +2659,5 @@ final Map de = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "Mit Portemonnaie bezahlen", "💳 Pay with Credit Card": "💳 Mit Kreditkarte bezahlen", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/el.dart b/siro_driver/lib/controller/local/el.dart index 444a754a..71623984 100644 --- a/siro_driver/lib/controller/local/el.dart +++ b/siro_driver/lib/controller/local/el.dart @@ -2659,4 +2659,5 @@ final Map el = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "💰 Πληρωμή με Πορτοφόλι", "💳 Pay with Credit Card": "💳 Πληρωμή με Κάρτα", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/en.dart b/siro_driver/lib/controller/local/en.dart index 6acb9f61..3de75d3e 100644 --- a/siro_driver/lib/controller/local/en.dart +++ b/siro_driver/lib/controller/local/en.dart @@ -2676,4 +2676,5 @@ final Map en = { "Clear Destination": "Clear Destination", "Destination cleared!": "Destination cleared!", "Move map to select destination": "Move map to select destination", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/es.dart b/siro_driver/lib/controller/local/es.dart index e50e1c38..6011e4a9 100644 --- a/siro_driver/lib/controller/local/es.dart +++ b/siro_driver/lib/controller/local/es.dart @@ -2659,4 +2659,5 @@ final Map es = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "Pagar con billetera", "💳 Pay with Credit Card": "💳 Pagar con tarjeta de crédito", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/fa.dart b/siro_driver/lib/controller/local/fa.dart index 83d68610..ed263c75 100644 --- a/siro_driver/lib/controller/local/fa.dart +++ b/siro_driver/lib/controller/local/fa.dart @@ -2659,4 +2659,5 @@ final Map fa = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "💰 پرداخت با کیف پول", "💳 Pay with Credit Card": "💳 پرداخت با کارت اعتباری", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/fr.dart b/siro_driver/lib/controller/local/fr.dart index 32f927db..a5a98ac8 100644 --- a/siro_driver/lib/controller/local/fr.dart +++ b/siro_driver/lib/controller/local/fr.dart @@ -2659,4 +2659,5 @@ final Map fr = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "💰 Payer avec le portefeuille", "💳 Pay with Credit Card": "💳 Payer par carte de crédit", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/hi.dart b/siro_driver/lib/controller/local/hi.dart index 868c0a02..36900250 100644 --- a/siro_driver/lib/controller/local/hi.dart +++ b/siro_driver/lib/controller/local/hi.dart @@ -2659,4 +2659,5 @@ final Map hi = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "💰 वॉलेट से भुगतान करें", "💳 Pay with Credit Card": "💳 क्रेडिट कार्ड से भुगतान करें", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/it.dart b/siro_driver/lib/controller/local/it.dart index 6727caec..9e7f9720 100644 --- a/siro_driver/lib/controller/local/it.dart +++ b/siro_driver/lib/controller/local/it.dart @@ -2659,4 +2659,5 @@ final Map it = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "💰 Paga con portafoglio", "💳 Pay with Credit Card": "💳 Paga con carta di credito", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/ru.dart b/siro_driver/lib/controller/local/ru.dart index 5100bb06..f876aae0 100644 --- a/siro_driver/lib/controller/local/ru.dart +++ b/siro_driver/lib/controller/local/ru.dart @@ -2659,4 +2659,5 @@ final Map ru = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "💰 Оплата кошельком", "💳 Pay with Credit Card": "💳 Оплата картой", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/tr.dart b/siro_driver/lib/controller/local/tr.dart index a41891d4..01455550 100644 --- a/siro_driver/lib/controller/local/tr.dart +++ b/siro_driver/lib/controller/local/tr.dart @@ -2659,4 +2659,5 @@ final Map tr = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "💰 Cüzdan ile Öde", "💳 Pay with Credit Card": "💳 Kredi Kartı ile Öde", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/translations.dart b/siro_driver/lib/controller/local/translations.dart index 1e8d8ff4..b8a2e07f 100755 --- a/siro_driver/lib/controller/local/translations.dart +++ b/siro_driver/lib/controller/local/translations.dart @@ -34,5 +34,6 @@ class MyTranslation extends Translations { "tr": tr, "ur": ur, "zh": zh, + "service_unavailable_area": "This service is not currently available in your area", }; } diff --git a/siro_driver/lib/controller/local/ur.dart b/siro_driver/lib/controller/local/ur.dart index 70ab6c4e..265704c9 100644 --- a/siro_driver/lib/controller/local/ur.dart +++ b/siro_driver/lib/controller/local/ur.dart @@ -2659,4 +2659,5 @@ final Map ur = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "💰 والٹ سے ادائیگی کریں", "💳 Pay with Credit Card": "💳 کریڈٹ کارڈ سے ادائیگی کریں", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_driver/lib/controller/local/zh.dart b/siro_driver/lib/controller/local/zh.dart index 766f9b7c..e3e94aaa 100644 --- a/siro_driver/lib/controller/local/zh.dart +++ b/siro_driver/lib/controller/local/zh.dart @@ -2659,4 +2659,5 @@ final Map zh = { "🏆 \\\${'Maximum Level Reached!": "🏆 \\\${'Maximum Level Reached!", "💰 Pay with Wallet": "💰 ادفع بالمحفظة", "💳 Pay with Credit Card": "💳 ادفع بالبطاقة", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/constant/country_polygons.dart b/siro_rider/lib/constant/country_polygons.dart index ec72272f..60750d78 100644 --- a/siro_rider/lib/constant/country_polygons.dart +++ b/siro_rider/lib/constant/country_polygons.dart @@ -4,116 +4,76 @@ import 'package:intaleq_maps/intaleq_maps.dart'; class CountryPolygons { // ========================================================== - // 1. الأردن: تغطية الممر الحضري الرئيسي (من إربد شمالاً حتى العقبة جنوباً) - // حوالي 12 نقطة + // 1. الأردن: عمان، الزرقاء، إربد، السلط ومساحة كبيرة داخل الأردن // ========================================================== static final List jordanBoundary = [ - // شمال إربد (قرب الحدود) - const LatLng(32.65, 35.80), - // شمال شرق المفرق - const LatLng(32.35, 37.00), - // شرق الزرقاء / الأزرق - const LatLng(31.85, 36.80), - // جنوب شرق (نهاية الزحف السكاني) - const LatLng(31.00, 36.50), - // جنوب / معان - const LatLng(30.30, 35.75), - // العقبة - const LatLng(29.50, 35.00), - // البحر الأحمر / الحدود الغربية - const LatLng(29.50, 34.85), - // غرب وادي عربة - const LatLng(30.80, 35.25), - // منطقة البحر الميت / السلط - const LatLng(32.00, 35.50), - // العودة عبر وادي الأردن إلى الشمال - const LatLng(32.45, 35.60), - // العودة لنقطة إربد - const LatLng(32.65, 35.80), + const LatLng(32.70, 35.80), // شمال إربد + const LatLng(32.35, 36.30), // المفرق + const LatLng(32.10, 36.30), // الزرقاء + const LatLng(31.85, 36.20), // شرق عمان + const LatLng(31.50, 36.00), // مادبا + const LatLng(30.80, 35.80), // الكرك / الطفيلة + const LatLng(30.20, 35.60), // معان + const LatLng(29.50, 35.00), // العقبة + const LatLng(29.50, 34.90), // الحدود الغربية للعقبة + const LatLng(30.50, 35.20), // وادي عربة + const LatLng(31.50, 35.50), // البحر الميت + const LatLng(32.05, 35.60), // السلط + const LatLng(32.70, 35.60), // غرب إربد ]; // ========================================================== - // 2. سوريا: تغطية الممر الغربي والساحلي (درعا، دمشق، حمص، حماة، حلب، الساحل) - // حوالي 14 نقطة + // 2. سوريا: دمشق، ريف دمشق، حمص، حلب، اللاذقية (استثناء الصحراء) // ========================================================== static final List syriaBoundary = [ - // درعا / الجنوب - const LatLng(32.65, 35.95), - // شرق السويداء (حدود المنطقة المأهولة) - const LatLng(32.85, 37.10), - // أطراف دمشق الشرقية - const LatLng(33.50, 36.65), - // تدمر (أقصى امتداد شرقي للمضلع) - const LatLng(34.50, 38.30), - // الرقة (شمال شرق) - const LatLng(35.95, 38.80), - // حلب (الشمال) - const LatLng(36.45, 37.15), - // الحدود الشمالية الغربية (إدلب / تركيا) - const LatLng(36.50, 36.50), - // اللاذقية (الساحل) - const LatLng(35.50, 35.75), - // طرطوس (الساحل) - const LatLng(34.80, 35.85), - // حمص - const LatLng(34.70, 36.70), - // حماة - const LatLng(35.10, 36.70), - // العودة إلى منطقة دمشق - const LatLng(33.40, 36.30), - // العودة إلى درعا - const LatLng(32.65, 35.95), + const LatLng(32.60, 36.00), // درعا + const LatLng(32.70, 36.60), // السويداء + const LatLng(33.50, 36.50), // ريف دمشق الشرقي + const LatLng(34.10, 36.80), // النبك + const LatLng(34.70, 36.80), // حمص + const LatLng(35.10, 36.80), // حماة + const LatLng(36.20, 37.30), // حلب الشرقية + const LatLng(36.60, 37.00), // شمال حلب + const LatLng(36.00, 36.00), // إدلب / الجبال + const LatLng(35.70, 35.80), // اللاذقية + const LatLng(34.80, 35.80), // طرطوس + const LatLng(34.50, 36.20), // تلكلخ + const LatLng(33.50, 36.00), // دمشق الغربية ]; // ========================================================== - // 3. مصر: تغطية القاهرة الكبرى، الدلتا، والإسكندرية والإسماعيلية - // حوالي 10 نقاط + // 3. مصر: القاهرة كاملة، الإسكندرية، ومراكز المحافظات // ========================================================== static final List egyptBoundary = [ - // جنوب الفيوم (أقصى امتداد جنوبي غربي) - const LatLng(29.20, 30.60), - // جنوب القاهرة (العياط) - const LatLng(29.80, 31.30), - // شرق السويس - const LatLng(29.95, 32.70), - // الإسماعيلية / القناة - const LatLng(30.60, 32.25), - // بورسعيد / أطراف الدلتا الشمالية الشرقية - const LatLng(31.30, 31.80), - // دمياط / ساحل الدلتا - const LatLng(31.50, 31.25), - // الإسكندرية (أقصى الشمال الغربي) - const LatLng(31.20, 29.80), - // غرب الدلتا - const LatLng(30.50, 30.20), - // العودة لنقطة البداية - const LatLng(29.20, 30.60), + const LatLng(29.50, 30.80), // جنوب الفيوم + const LatLng(29.80, 31.40), // شرق القاهرة الكبرى + const LatLng(30.10, 31.80), // العاشر من رمضان + const LatLng(30.60, 32.30), // الإسماعيلية + const LatLng(31.30, 31.80), // بورسعيد + const LatLng(31.50, 31.25), // دمياط + const LatLng(31.30, 29.80), // الإسكندرية + const LatLng(30.80, 29.80), // وادي النطرون + const LatLng(30.00, 30.80), // 6 أكتوبر / غرب القاهرة ]; - // دالة تُرجع رابط API بناءً على اسم الدولة - // static String getRoutingApiUrl(String countryName) { - // switch (countryName) { - // case 'Jordan': - // return 'https://routec.intaleq.xyz/route-jo'; - // case 'Syria': - // return 'https://routec.intaleq.xyz/route'; - // case 'Egypt': - // return 'https://routec.intaleq.xyz/route-eg'; - // default: - // // الافتراضي في حالة لم يقع الموقع ضمن أي من المضلعات - // return 'https://routec.intaleq.xyz/route'; - // } - // } + /// دالة للتحقق مما إذا كان الموقع ضمن نطاق الخدمة المدعوم + static bool isServiceSupported(LatLng? point) { + if (point == null) return false; + if (_isPointInPolygon(point, jordanBoundary)) return true; + if (_isPointInPolygon(point, syriaBoundary)) return true; + if (_isPointInPolygon(point, egyptBoundary)) return true; + return false; + } /// دالة تحدد اسم الدولة (باللغة الإنجليزية للـ API) بناءً على الإحداثيات static String getCountryName(LatLng? point) { - if (point == null) return "jordan"; + if (point == null) return "unsupported"; if (_isPointInPolygon(point, jordanBoundary)) return "jordan"; if (_isPointInPolygon(point, syriaBoundary)) return "syria"; if (_isPointInPolygon(point, egyptBoundary)) return "egypt"; - return "jordan"; // الافتراضي + return "unsupported"; } /// خوارزمية Ray Casting للتحقق من وقوع نقطة داخل مضلع diff --git a/siro_rider/lib/controller/home/map/location_search_controller.dart b/siro_rider/lib/controller/home/map/location_search_controller.dart index 969b26b3..82281a85 100644 --- a/siro_rider/lib/controller/home/map/location_search_controller.dart +++ b/siro_rider/lib/controller/home/map/location_search_controller.dart @@ -296,6 +296,33 @@ class LocationSearchController extends GetxController { newStartPointLocation = passengerLocation; newMyLocation = passengerLocation; + if (!CountryPolygons.isServiceSupported(passengerLocation)) { + Get.bottomSheet( + Container( + padding: const EdgeInsets.all(20), + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical(top: Radius.circular(20)), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.location_off, size: 60, color: Colors.redAccent), + const SizedBox(height: 15), + Text( + 'service_unavailable_area'.tr, + style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), + const SizedBox(height: 10), + ], + ), + ), + isDismissible: false, + enableDrag: false, + ); + } + if (Get.isRegistered()) { final rideLifecycle = Get.find(); rideLifecycle.getLocationArea( diff --git a/siro_rider/lib/controller/local/ar_eg.dart b/siro_rider/lib/controller/local/ar_eg.dart index d0be0b2b..32a1b96c 100644 --- a/siro_rider/lib/controller/local/ar_eg.dart +++ b/siro_rider/lib/controller/local/ar_eg.dart @@ -1753,4 +1753,5 @@ final Map ar_eg = { "Please top up your wallet to subscribe to Siro Prime.": "يرجى شحن محفظتك للاشتراك في سيرو برايم.", "Top Up Wallet": "شحن المحفظة", "• Subscription renews automatically every 30 days\n• Cancel anytime from your wallet page\n• Amount is deducted from your in-app wallet": "• يتجدد الاشتراك تلقائياً كل 30 يوماً\n• يمكن الإلغاء في أي وقت من صفحة المحفظة\n• يُخصم المبلغ من محفظتك داخل التطبيق", + "service_unavailable_area": "هذه الخدمة غير متوفرة حالياً في منطقتك", }; diff --git a/siro_rider/lib/controller/local/ar_jo.dart b/siro_rider/lib/controller/local/ar_jo.dart index 8fa01fe0..fa563812 100644 --- a/siro_rider/lib/controller/local/ar_jo.dart +++ b/siro_rider/lib/controller/local/ar_jo.dart @@ -1753,4 +1753,5 @@ final Map ar_jo = { "Please top up your wallet to subscribe to Siro Prime.": "يرجى شحن محفظتك للاشتراك في سيرو برايم.", "Top Up Wallet": "شحن المحفظة", "• Subscription renews automatically every 30 days\n• Cancel anytime from your wallet page\n• Amount is deducted from your in-app wallet": "• يتجدد الاشتراك تلقائياً كل 30 يوماً\n• يمكن الإلغاء في أي وقت من صفحة المحفظة\n• يُخصم المبلغ من محفظتك داخل التطبيق", + "service_unavailable_area": "هذه الخدمة غير متوفرة حالياً في منطقتك", }; diff --git a/siro_rider/lib/controller/local/ar_sy.dart b/siro_rider/lib/controller/local/ar_sy.dart index 1a2a10a2..8192382f 100644 --- a/siro_rider/lib/controller/local/ar_sy.dart +++ b/siro_rider/lib/controller/local/ar_sy.dart @@ -1753,4 +1753,5 @@ final Map ar_sy = { "Please top up your wallet to subscribe to Siro Prime.": "يرجى شحن محفظتك للاشتراك في سيرو برايم.", "Top Up Wallet": "شحن المحفظة", "• Subscription renews automatically every 30 days\n• Cancel anytime from your wallet page\n• Amount is deducted from your in-app wallet": "• يتجدد الاشتراك تلقائياً كل 30 يوماً\n• يمكن الإلغاء في أي وقت من صفحة المحفظة\n• يُخصم المبلغ من محفظتك داخل التطبيق", + "service_unavailable_area": "هذه الخدمة غير متوفرة حالياً في منطقتك", }; diff --git a/siro_rider/lib/controller/local/de.dart b/siro_rider/lib/controller/local/de.dart index c0e9e3fa..ed771f68 100644 --- a/siro_rider/lib/controller/local/de.dart +++ b/siro_rider/lib/controller/local/de.dart @@ -1712,4 +1712,5 @@ final Map de = { "⚠️ You need to choose an amount!": "⚠️ Sie müssen einen Betrag auswählen!", "💰 Pay with Wallet": "Mit Portemonnaie bezahlen", "💳 Pay with Credit Card": "💳 Mit Kreditkarte bezahlen", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/controller/local/el.dart b/siro_rider/lib/controller/local/el.dart index 2cde47a8..9d3bdfe2 100644 --- a/siro_rider/lib/controller/local/el.dart +++ b/siro_rider/lib/controller/local/el.dart @@ -1712,4 +1712,5 @@ final Map el = { "⚠️ You need to choose an amount!": "⚠️ Επιλέξτε ποσό!", "💰 Pay with Wallet": "💰 Πληρωμή με Πορτοφόλι", "💳 Pay with Credit Card": "💳 Πληρωμή με Κάρτα", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/controller/local/es.dart b/siro_rider/lib/controller/local/es.dart index 3478f7da..597d5224 100644 --- a/siro_rider/lib/controller/local/es.dart +++ b/siro_rider/lib/controller/local/es.dart @@ -1712,4 +1712,5 @@ final Map es = { "⚠️ You need to choose an amount!": "⚠️ ¡Necesitas elegir un monto!", "💰 Pay with Wallet": "Pagar con billetera", "💳 Pay with Credit Card": "💳 Pagar con tarjeta de crédito", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/controller/local/fa.dart b/siro_rider/lib/controller/local/fa.dart index 4b7d11c5..8c048e39 100644 --- a/siro_rider/lib/controller/local/fa.dart +++ b/siro_rider/lib/controller/local/fa.dart @@ -1712,4 +1712,5 @@ final Map fa = { "⚠️ You need to choose an amount!": "⚠️ باید مبلغی را انتخاب کنید!", "💰 Pay with Wallet": "💰 پرداخت با کیف پول", "💳 Pay with Credit Card": "💳 پرداخت با کارت اعتباری", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/controller/local/fr.dart b/siro_rider/lib/controller/local/fr.dart index 26e81c36..34a5fe70 100644 --- a/siro_rider/lib/controller/local/fr.dart +++ b/siro_rider/lib/controller/local/fr.dart @@ -1712,4 +1712,5 @@ final Map fr = { "⚠️ You need to choose an amount!": "⚠️ Vous devez choisir un montant !", "💰 Pay with Wallet": "💰 Payer avec le portefeuille", "💳 Pay with Credit Card": "💳 Payer par carte de crédit", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/controller/local/hi.dart b/siro_rider/lib/controller/local/hi.dart index bcaf55bb..b05d5152 100644 --- a/siro_rider/lib/controller/local/hi.dart +++ b/siro_rider/lib/controller/local/hi.dart @@ -1712,4 +1712,5 @@ final Map hi = { "⚠️ You need to choose an amount!": "⚠️ आपको एक राशि चुनने की आवश्यकता है!", "💰 Pay with Wallet": "💰 वॉलेट से भुगतान करें", "💳 Pay with Credit Card": "💳 क्रेडिट कार्ड से भुगतान करें", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/controller/local/it.dart b/siro_rider/lib/controller/local/it.dart index e2dea693..443ede97 100644 --- a/siro_rider/lib/controller/local/it.dart +++ b/siro_rider/lib/controller/local/it.dart @@ -1712,4 +1712,5 @@ final Map it = { "⚠️ You need to choose an amount!": "⚠️ Devi scegliere un importo!", "💰 Pay with Wallet": "💰 Paga con portafoglio", "💳 Pay with Credit Card": "💳 Paga con carta di credito", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/controller/local/ru.dart b/siro_rider/lib/controller/local/ru.dart index b7d49aeb..4348b0e6 100644 --- a/siro_rider/lib/controller/local/ru.dart +++ b/siro_rider/lib/controller/local/ru.dart @@ -1712,4 +1712,5 @@ final Map ru = { "⚠️ You need to choose an amount!": "⚠️ Выберите сумму!", "💰 Pay with Wallet": "💰 Оплата кошельком", "💳 Pay with Credit Card": "💳 Оплата картой", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/controller/local/tr.dart b/siro_rider/lib/controller/local/tr.dart index c7fb6e96..4deb4db0 100644 --- a/siro_rider/lib/controller/local/tr.dart +++ b/siro_rider/lib/controller/local/tr.dart @@ -1712,4 +1712,5 @@ final Map tr = { "⚠️ You need to choose an amount!": "⚠️ Bir tutar seçmelisiniz!", "💰 Pay with Wallet": "💰 Cüzdan ile Öde", "💳 Pay with Credit Card": "💳 Kredi Kartı ile Öde", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/controller/local/translations.dart b/siro_rider/lib/controller/local/translations.dart index 845ce8f8..7849656c 100644 --- a/siro_rider/lib/controller/local/translations.dart +++ b/siro_rider/lib/controller/local/translations.dart @@ -32,5 +32,6 @@ class MyTranslation extends Translations { "tr": tr, "ur": ur, "zh": zh, + "service_unavailable_area": "This service is not currently available in your area", }; } diff --git a/siro_rider/lib/controller/local/ur.dart b/siro_rider/lib/controller/local/ur.dart index 1bc59a8e..1fc3d240 100644 --- a/siro_rider/lib/controller/local/ur.dart +++ b/siro_rider/lib/controller/local/ur.dart @@ -1712,4 +1712,5 @@ final Map ur = { "⚠️ You need to choose an amount!": "⚠️ آپ کو ایک رقم منتخب کرنے کی ضرورت ہے!", "💰 Pay with Wallet": "💰 والٹ سے ادائیگی کریں", "💳 Pay with Credit Card": "💳 کریڈٹ کارڈ سے ادائیگی کریں", + "service_unavailable_area": "This service is not currently available in your area", }; diff --git a/siro_rider/lib/controller/local/zh.dart b/siro_rider/lib/controller/local/zh.dart index b867cb61..a5ba4b3f 100644 --- a/siro_rider/lib/controller/local/zh.dart +++ b/siro_rider/lib/controller/local/zh.dart @@ -1712,4 +1712,5 @@ final Map zh = { "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", "💰 Pay with Wallet": "💰 ادفع بالمحفظة", "💳 Pay with Credit Card": "💳 ادفع بالبطاقة", + "service_unavailable_area": "This service is not currently available in your area", };