import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/main.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/views/home/my_wallet/passenger_wallet.dart'; import 'package:Intaleq/views/home/profile/complaint_page.dart'; import 'package:Intaleq/views/home/profile/order_history.dart'; import 'package:Intaleq/views/home/profile/promos_passenger_page.dart'; import 'package:url_launcher/url_launcher.dart'; import 'dart:ui'; // مهم لإضافة تأثير الضبابية import '../../../constant/colors.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../notification/notification_page.dart'; import '../HomePage/contact_us.dart'; import '../setting_page.dart'; import '../profile/passenger_profile_page.dart'; // --- الويدجت الرئيسية بالتصميم الجديد --- class MapMenuWidget extends StatelessWidget { const MapMenuWidget({super.key}); @override Widget build(BuildContext context) { // استخدام Get.lazyPut لضمان وجود الكنترولر Get.lazyPut(() => MapPassengerController()); return GetBuilder( builder: (controller) => Stack( children: [ // --- القائمة الجانبية المنزلقة --- _buildSideMenu(controller), // --- زر القائمة العائم --- // _buildMenuButton(controller), ], ), ); } // --- ويدجت لبناء زر القائمة --- Widget _buildMenuButton(MapPassengerController controller) { return Positioned( top: 45, left: 16, child: SafeArea( child: InkWell( onTap: controller.getDrawerMenu, // نفس دالتك القديمة borderRadius: BorderRadius.circular(50), child: ClipRRect( borderRadius: BorderRadius.circular(50), child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0), child: AnimatedContainer( duration: const Duration(milliseconds: 300), padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: AppColor.secondaryColor.withOpacity(0.8), shape: BoxShape.circle, border: Border.all(color: AppColor.writeColor.withOpacity(0.2)), ), child: Icon( controller.widthMenu > 0 ? Icons.close_rounded : Icons.menu_rounded, color: AppColor.writeColor, size: 26, ), ), ), ), ), ), ); } // --- ويدجت لبناء القائمة الجانبية --- Widget _buildSideMenu(MapPassengerController controller) { return AnimatedPositioned( duration: const Duration(milliseconds: 400), curve: Curves.fastOutSlowIn, top: 0, bottom: 0, // تحريك القائمة من خارج الشاشة إلى داخلها left: controller.widthMenu > 0 ? 0 : -Get.width, child: ClipRRect( child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), child: Container( width: Get.width * 0.75, // عرض القائمة constraints: const BoxConstraints(maxWidth: 300), color: AppColor.secondaryColor.withOpacity(0.9), child: SafeArea( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // --- 1. رأس القائمة (معلومات المستخدم) --- _buildMenuHeader(), // --- 2. الأزرار السريعة المدمجة --- _buildQuickActionButtons(), const Divider( color: AppColor.writeColor, indent: 16, endIndent: 16, height: 1), // --- 3. قائمة الخيارات الرئيسية --- Expanded( child: ListView( padding: const EdgeInsets.symmetric(vertical: 8), children: [ IconMainPageMap( title: 'My Wallet'.tr, icon: Icons.account_balance_wallet_outlined, onTap: () => Get.to(() => const PassengerWallet())), IconMainPageMap( title: 'Order History'.tr, icon: Icons.history_edu_rounded, onTap: () => Get.to(() => const OrderHistory())), IconMainPageMap( title: 'Contact Us'.tr, icon: Icons.contact_support_outlined, onTap: () => Get.to(() => ContactUsPage())), IconMainPageMap( title: 'Driver'.tr, icon: Ionicons.car_sport_outline, onTap: () => _launchDriverAppUrl()), IconMainPageMap( title: 'Complaint'.tr, icon: Icons.feedback_outlined, onTap: () => Get.to(() => ComplaintPage())), IconMainPageMap( title: 'Promos'.tr, icon: Icons.local_offer_outlined, onTap: () => Get.to(() => const PromosPassengerPage())), ], ), ), ], ), ), ), ), ), ); } // --- ويدجت مساعدة لرأس القائمة --- Widget _buildMenuHeader() { return Padding( padding: const EdgeInsets.all(20.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // CircleAvatar( // radius: 30, // backgroundColor: AppColor.primaryColor, // child: // const Icon(Icons.person, color: AppColor.writeColor, size: 35), // ), // const SizedBox(height: 12), Text( "Welcome Back!".tr, // يمكنك تغييرها لاسم المستخدم style: AppStyle.title .copyWith(color: AppColor.writeColor.withOpacity(0.7)), ), Text( box.read(BoxName.name), // يمكنك تغييرها لاسم المستخدم style: AppStyle.headTitle.copyWith(fontSize: 22), ), ], ), ); } // --- ويدجت مساعدة للأزرار السريعة --- Widget _buildQuickActionButtons() { return Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ _buildSmallActionButton( icon: Icons.notifications_none_rounded, label: 'Alerts'.tr, onTap: () => Get.to(() => const NotificationPage())), _buildSmallActionButton( icon: Icons.person_outline_rounded, label: 'Profile'.tr, onTap: () => Get.to(() => PassengerProfilePage())), _buildSmallActionButton( icon: Icons.settings_outlined, label: 'Settings'.tr, onTap: () => Get.to(() => const SettingPage())), ], ), ); } Widget _buildSmallActionButton( {required IconData icon, required String label, required VoidCallback onTap}) { return InkWell( onTap: onTap, borderRadius: BorderRadius.circular(8), child: Padding( padding: const EdgeInsets.all(8.0), child: Column( mainAxisSize: MainAxisSize.min, children: [ Icon(icon, color: AppColor.writeColor, size: 24), const SizedBox(height: 4), Text(label, style: AppStyle.subtitle.copyWith(fontSize: 12)), ], ), ), ); } // --- نفس دالتك القديمة لفتح رابط تطبيق السائق --- void _launchDriverAppUrl() async { final String driverAppUrl; if (defaultTargetPlatform == TargetPlatform.android) { driverAppUrl = 'https://play.google.com/store/apps/details?id=com.sefer_driver'; } else if (defaultTargetPlatform == TargetPlatform.iOS) { driverAppUrl = 'https://apps.apple.com/eg/app/tripz-driver/id6502189302'; } else { return; } try { final Uri url = Uri.parse(driverAppUrl); if (await canLaunchUrl(url)) { await launchUrl(url); } else { Get.snackbar('Error', 'Could not launch driver app store.'); } } catch (e) { Get.snackbar('Error', 'Could not open the link.'); } } } // --- كلاس عناصر القائمة بالتصميم الجديد (يستخدم ListTile) --- class IconMainPageMap extends StatelessWidget { const IconMainPageMap({ super.key, required this.title, required this.onTap, required this.icon, }); final String title; final IconData icon; final VoidCallback onTap; @override Widget build(BuildContext context) { return ListTile( onTap: onTap, leading: Icon(icon, size: 26, color: AppColor.writeColor.withOpacity(0.8)), title: Text( title.tr, style: AppStyle.title.copyWith(fontSize: 16), ), splashColor: AppColor.primaryColor.withOpacity(0.2), ); } }