Update: 2026-08-07 01:53:09
This commit is contained in:
@@ -137,6 +137,61 @@ Future<bool> onStart(ServiceInstance service) async {
|
||||
payload: jsonEncode(data));
|
||||
}
|
||||
});
|
||||
|
||||
// ══════════════════════════════════════════════════════════════════
|
||||
// 🚫 الرحلة أخذها سائق آخر
|
||||
//
|
||||
// نافذة الأوفرلي تعيش في عزلة منفصلة بلا سوكِت خاص بها، فلا تعلم
|
||||
// بشيء من نفسها. وهذه العزلة الخلفية هي الوحيدة التي تسمع الحدث
|
||||
// والتطبيق مغلق. بدون هذا المستمع تبقى النافذة معروضة وعدّادها
|
||||
// يعمل على رحلة لم تعد موجودة، ويضغط السائق "قبول" فيجدها مأخوذة.
|
||||
//
|
||||
// نغلق النافذتين معاً: نافذة فلاتر (مسار السوكِت) والنافذة الأصلية
|
||||
// (مسار FCM) — لا نعرف أيّهما معروضة الآن.
|
||||
// ══════════════════════════════════════════════════════════════════
|
||||
socket.on('ride_taken', (data) async {
|
||||
try {
|
||||
await GetStorage.init();
|
||||
final box = GetStorage();
|
||||
final String myDriverId = box.read(BoxName.driverID).toString();
|
||||
final String whoTookIt = data?['taken_by_driver_id']?.toString() ?? '';
|
||||
|
||||
// لا نغلق على من فاز بها — تطبيقه في طريقه لفتح شاشة الرحلة.
|
||||
if (whoTookIt == myDriverId) return;
|
||||
|
||||
bool closedAny = false;
|
||||
|
||||
if (Platform.isAndroid) {
|
||||
if (await Overlay.FlutterOverlayWindow.isActive()) {
|
||||
await Overlay.FlutterOverlayWindow.closeOverlay();
|
||||
closedAny = true;
|
||||
}
|
||||
if (await TripOverlayPlugin.isOverlayActive()) {
|
||||
await TripOverlayPlugin.hideOverlay();
|
||||
closedAny = true;
|
||||
}
|
||||
}
|
||||
|
||||
// الإشعار فقط إن كان هناك ما يُغلق فعلاً — وإلا أزعجنا سائقاً
|
||||
// لم يُعرض عليه شيء أصلاً (الحدث يُبثّ للجميع).
|
||||
if (closedAny) {
|
||||
flutterLocalNotificationsPlugin.show(
|
||||
id: 1003,
|
||||
title: "الطلب لم يعد متاحاً",
|
||||
body: "قام سائق آخر بقبول هذه الرحلة",
|
||||
notificationDetails: const NotificationDetails(
|
||||
iOS: DarwinNotificationDetails(
|
||||
presentAlert: true,
|
||||
presentBadge: false,
|
||||
presentSound: false,
|
||||
),
|
||||
),
|
||||
payload: '');
|
||||
}
|
||||
} catch (e) {
|
||||
print("⚠️ ride_taken handler error: $e");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user