import 'package:get/get.dart'; import '../models/onprovider_order_model.dart'; import '../models/worker_model.dart'; import '../service/fire_store_utils.dart'; class MyBookingOnDemandController extends GetxController { RxList orders = [].obs; RxBool isLoading = true.obs; RxString selectedTab = "Placed".obs; RxMap workers = {}.obs; RxList tabTitles = ["Placed", "Completed", "Cancelled"].obs; @override void onInit() { super.onInit(); listenOrders(); // Listen for real-time updates } void selectTab(String tab) { selectedTab.value = tab; } void listenOrders() { isLoading.value = true; FireStoreUtils.getProviderOrdersStream().listen( (updatedOrders) { orders.value = updatedOrders; // Fetch worker info if not already fetched for (var order in updatedOrders) { if (order.workerId != null && order.workerId!.isNotEmpty && !workers.containsKey(order.workerId!)) { FireStoreUtils.getWorker(order.workerId!).then((worker) { if (worker != null) workers[order.workerId!] = worker; }); } } isLoading.value = false; }, onError: (error) { print("Error fetching orders stream: $error"); isLoading.value = false; }, ); } List get filteredParcelOrders => getOrdersForTab(selectedTab.value); List getOrdersForTab(String tab) { switch (tab) { case "Placed": return orders .where( (order) => [ "Order Placed", "Order Accepted", "Order Assigned", "Order Ongoing", "In Transit", ].contains(order.status), ) .toList(); case "Completed": return orders .where((order) => ["Order Completed"].contains(order.status)) .toList(); case "Cancelled": return orders .where( (order) => [ "Order Rejected", "Order Cancelled", "Driver Rejected", ].contains(order.status), ) .toList(); default: return []; } } WorkerModel? getWorker(String? workerId) { if (workerId == null || workerId.isEmpty) return null; return workers[workerId]; } }