Food delivery driver module + masked calls + TURN
This commit is contained in:
@@ -15,8 +15,13 @@ import '../../constant/box_name.dart';
|
||||
import '../../constant/links.dart';
|
||||
import '../../main.dart'; // للوصول لـ box
|
||||
import '../../print.dart';
|
||||
import '../../views/food_delivery/food_delivery_home_page.dart';
|
||||
import '../../views/food_delivery/food_offer_page.dart';
|
||||
import '../../views/food_delivery/food_task_details_page.dart';
|
||||
import '../../views/home/Captin/driver_map_page.dart';
|
||||
import '../../views/home/Captin/orderCaptin/order_request_page.dart';
|
||||
import '../food_delivery/food_delivery_controller.dart';
|
||||
import '../food_delivery/food_notification_service.dart';
|
||||
import '../functions/crud.dart';
|
||||
import '../home/captin/home_captain_controller.dart';
|
||||
|
||||
@@ -213,6 +218,14 @@ class NotificationController extends GetxController {
|
||||
if (payload == null) return;
|
||||
|
||||
final payloadData = jsonDecode(payload) as Map<String, dynamic>;
|
||||
|
||||
// إشعارات وحدة التوصيل لها حمولة وأزرار خاصة بها — نفرزها قبل أي شيء
|
||||
// لأن باقي هذه الدالة يفترض حمولة رحلة (مصفوفة add_ride.php).
|
||||
if (payloadData.containsKey('food_event')) {
|
||||
await _handleFoodNotificationResponse(response, payloadData);
|
||||
return;
|
||||
}
|
||||
|
||||
final rawData = payloadData['data'];
|
||||
|
||||
List<dynamic> listData = [];
|
||||
@@ -248,6 +261,38 @@ class NotificationController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
// ── فرع وحدة التوصيل — مسار مستقل تماماً عن مسار الرحلات أعلاه ──────────
|
||||
Future<void> _handleFoodNotificationResponse(
|
||||
NotificationResponse response, Map<String, dynamic> payloadData) async {
|
||||
final orderId = int.tryParse(payloadData['order_id']?.toString() ?? '') ?? 0;
|
||||
if (orderId == 0) return;
|
||||
|
||||
await FoodNotificationService.instance.cancelOfferNotification();
|
||||
|
||||
// الكنترولر قد لا يكون مسجَّلاً (الضغط على الإشعار والتطبيق مغلق)، فنسجّله
|
||||
// ليعيد بناء حالته من الخادم قبل عرض أي شاشة.
|
||||
final controller = Get.isRegistered<FoodDeliveryController>()
|
||||
? Get.find<FoodDeliveryController>()
|
||||
: Get.put(FoodDeliveryController());
|
||||
|
||||
if (response.actionId == 'FOOD_ACCEPT') {
|
||||
await controller.respondToOffer(orderId, true);
|
||||
Get.to(() => FoodTaskDetailsPage(orderId: orderId));
|
||||
return;
|
||||
}
|
||||
|
||||
if (response.actionId == 'FOOD_REJECT') {
|
||||
await controller.respondToOffer(orderId, false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (payloadData['food_event'] == 'offer') {
|
||||
Get.to(() => const FoodOfferPage(), fullscreenDialog: true);
|
||||
} else {
|
||||
Get.to(() => const FoodDeliveryHomePage());
|
||||
}
|
||||
}
|
||||
|
||||
// ==============================================================================
|
||||
// 4. منطق القبول الآمن (Safe Accept Logic)
|
||||
// ==============================================================================
|
||||
|
||||
Reference in New Issue
Block a user