import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../constant/box_name.dart'; import '../../constant/colors.dart'; import '../../controller/functions/crud.dart'; import '../../controller/home/map/map_socket_controller.dart'; import '../../controller/home/map/map_engine_controller.dart'; import '../../controller/home/map/location_search_controller.dart'; import '../../controller/home/map/nearby_drivers_controller.dart'; import '../../controller/home/map/ride_lifecycle_controller.dart'; import '../../controller/home/map/ui_interactions_controller.dart'; import '../../controller/home/map/ride_state.dart'; import '../../main.dart'; import '../../views/home/map_widget.dart/ride_begin_passenger.dart'; import '../../controller/home/menu_controller.dart'; import 'map_widget.dart/apply_order_widget.dart'; import 'map_widget.dart/legacy_destination_bottom_sheet.dart'; import 'map_widget.dart/car_details_widget_to_go.dart'; import 'map_widget.dart/cash_confirm_bottom_page.dart'; import 'map_widget.dart/google_map_passenger_widget.dart'; import 'map_widget.dart/left_main_menu_icons.dart'; import 'route_planner/route_planner.dart'; import 'map_widget.dart/map_menu_widget.dart'; import '../../controller/functions/package_info.dart'; import 'map_widget.dart/passenger_ride_location_widget.dart'; import 'map_widget.dart/payment_method_page.dart'; import 'map_widget.dart/points_page_for_rider.dart'; import 'map_widget.dart/ride_from_start_app.dart'; import 'map_widget.dart/searching_captain_window.dart'; import 'map_widget.dart/vip_begin.dart'; class MapPagePassenger extends StatelessWidget { const MapPagePassenger({super.key}); @override Widget build(BuildContext context) { Get.find(); Get.find(); Get.find(); Get.find(); final rideLifecycle = Get.find(); Get.find(); Get.find(); Get.find(); // ✅ تهيئة البيانات بعد تسجيل الدخول إن لم تكن قد تهيأت بالفعل final bool isLoggedIn = box.read(BoxName.isVerified) == '1' && box.read(BoxName.passengerID) != null; if (isLoggedIn && !rideLifecycle.isDataInitializedAfterLogin) { rideLifecycle.initializeDataAfterLogin(); } WidgetsBinding.instance.addPostFrameCallback((_) { checkForUpdate(context); }); return Scaffold( backgroundColor: Get.isDarkMode ? const Color(0xFF1E1E1E) : Colors.white, body: SafeArea( bottom: true, child: Stack( children: [ GoogleMapPassengerWidget(), // OsmMapPassengerWidget(), leftMainMenuIcons(), // PaymobPackage(), // ── New Route Planner ── const RpCenterPin(), const RoutePlannerSheet(), CarDetailsTypeToChoose(), // const HeaderDestination(), const BurcMoney(), // const PromoCode(), ApplyOrderWidget(), const MapMenuWidget(), const CancelRidePageShow(), CashConfirmPageShown(), const PaymentMethodPage(), const SearchingCaptainWindow(), AttributionMap(), const PassengerRideLocationWidget(), const RideBeginPassenger(), const VipRideBeginPassenger(), const RideFromStartApp(), PointsPageForRider(), ], ), ), ); } } class AttributionMap extends StatelessWidget { const AttributionMap({ super.key, }); @override Widget build(BuildContext context) { return Positioned( left: 12, bottom: Get.height * 0.2 + 4, child: Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: [ Image.asset( 'assets/images/logo.png', width: 10, height: 10, color: Colors.grey.shade500, ), const SizedBox(width: 4), Text( "Intaleq Maps", style: TextStyle( fontSize: 9, color: Colors.grey.shade500, fontWeight: FontWeight.w600, letterSpacing: 0.3, shadows: [ Shadow( blurRadius: 3, color: Colors.black.withValues(alpha: 0.3), ), ], ), ), ], ), ); } } class CancelRidePageShow extends StatelessWidget { const CancelRidePageShow({ super.key, }); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) { // نستخدم RideState Enum لأنه أدق، أو نصلح المنطق النصي // الشرط: // 1. يوجد خط مسار // 2. الحالة ليست "بدأت" // 3. الحالة ليست "انتهت" // 4. الحالة ليست "قيد التنفيذ" (لزيادة التأكيد) // bool showCancelButton = controller.polyLines.isNotEmpty && // controller.statusRide != 'Begin' && // استخدمنا && // controller.statusRide != 'inProgress' && // controller.statusRide != 'Finished'; // يمكنك أيضاً استخدام RideState ليكون أدق: bool showCancelButton = controller.polyLines.isNotEmpty && controller.currentRideState.value != RideState.inProgress && controller.currentRideState.value != RideState.finished; return showCancelButton ? Positioned( right: 10, top: Get.height * .013, child: GestureDetector( onTap: () { // استدعاء دالة الإلغاء controller.changeCancelRidePageShow(); // ملاحظة: تأكد أن الدالة تظهر ديالوج للتأكيد أولاً ولا تلغي فوراً }, child: Container( decoration: BoxDecoration( color: AppColor.redColor, borderRadius: BorderRadius.circular(15)), child: Padding( padding: const EdgeInsets.all(3), child: Icon( Icons.clear, size: 40, color: AppColor.secondaryColor, ), ), ), )) : const SizedBox(); }, ); } } // PickerIconOnMap was replaced by RpCenterPin (see route_planner/rp_center_pin.dart).