import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'dart:ui'; // مهم لإضافة تأثير الضبابية import '../../../constant/colors.dart'; import '../../../controller/functions/tts.dart'; import '../../../controller/home/ios_live_activity_service.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../controller/home/vip_waitting_page.dart'; import '../../../print.dart'; // --- الدالة الرئيسية بالتصميم الجديد --- GetBuilder leftMainMenuIcons() { Get.put(TextToSpeechController()); return GetBuilder( builder: (controller) => Positioned( // تم تعديل الموضع ليتناسب مع التصميم الجديد top: Get.height * .01, left: 0, right: 0, child: Center( child: ClipRRect( borderRadius: BorderRadius.circular(50.0), // لإنشاء شكل الكبسولة child: BackdropFilter( filter: ImageFilter.blur( sigmaX: 8.0, sigmaY: 8.0), // تأثير الزجاج المصنفر child: AnimatedContainer( duration: const Duration(milliseconds: 300), padding: const EdgeInsets.symmetric(horizontal: 8), decoration: BoxDecoration( color: AppColor.secondaryColor.withOpacity(0.4), // لون شبه شفاف borderRadius: BorderRadius.circular(50.0), border: Border.all(color: AppColor.secondaryColor), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, // ليأخذ الشريط حجم الأزرار فقط children: [ // --- تم استخدام دالة مساعدة جديدة للزر --- _buildMapActionButton( icon: Icons.satellite_alt_outlined, tooltip: 'Toggle Map Type', onPressed: () => controller.changeMapType(), ), // _buildVerticalDivider(), // _buildMapActionButton( // icon: Icons.traffic_outlined, // tooltip: 'Toggle Traffic', // onPressed: () => controller.changeMapTraffic(), // ), _buildVerticalDivider(), _buildMapActionButton( icon: Icons.my_location_rounded, tooltip: 'Go to My Location', onPressed: () { controller.mapController?.animateCamera( CameraUpdate.newLatLng( LatLng( controller.passengerLocation.latitude, controller.passengerLocation.longitude, ), ), ); }, ), _buildVerticalDivider(), _buildMapActionButton( icon: Octicons.watch, tooltip: 'VIP Waiting Page', onPressed: () => Get.to(() => VipWaittingPage()), ), // _buildMapActionButton( // icon: Octicons.ellipsis, // tooltip: 'test', // onPressed: () => Get.to(() => TestPage()), // ), ], ), ), ), ), ), ), ); } // --- دالة مساعدة جديدة لإنشاء الأزرار بشكل أنيق --- Widget _buildMapActionButton({ required IconData icon, required String tooltip, required VoidCallback onPressed, }) { return IconButton( onPressed: onPressed, icon: Icon(icon, color: AppColor.writeColor, size: 22), tooltip: tooltip, splashRadius: 22, padding: const EdgeInsets.all(12), constraints: const BoxConstraints(), // لإزالة المساحات الافتراضية ); } // --- ويدجت للفاصل الرأسي بين الأزرار --- Widget _buildVerticalDivider() { return Container( height: 20, width: 1, color: AppColor.writeColor.withOpacity(0.2), ); } // --- باقي الكود الخاص بك يبقى كما هو بدون تغيير --- class TestPage extends StatelessWidget { const TestPage({super.key}); @override Widget build(BuildContext context) { final random = Random(); return Scaffold( appBar: AppBar( title: const Text('iOS Live Activity Test'), ), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // زر البدء ElevatedButton( onPressed: () async { print("🍎 محاولة تشغيل Live Activity (Start)..."); try { await IosLiveActivityService.startRideActivity( rideId: "123", driverName: "تجربة مبدئية", carDetails: "تويوتا • أسود", etaText: "5 دقائق", progress: 0.2, ); Log.print( "✅ تم تشغيل Live Activity بنجاح! أغلق الشاشة لترى النتيجة."); } catch (e) { Log.print("❌ خطأ في Start Live Activity: $e"); } }, child: const Text('Start Activity'), ), const SizedBox(height: 16), // زر التحديث العشوائي ElevatedButton( onPressed: () async { Log.print("🔄 محاولة تحديث Live Activity (Update)..."); // توليد بيانات عشوائية للاختبار final statuses = ['waiting', 'ongoing']; final status = statuses[random.nextInt(statuses.length)]; final int minutes = random.nextInt(15) + 1; // 1–15 final String eta = "$minutes دقائق"; final double progress = (random.nextDouble() * 0.9) + 0.05; // بين 0.05 و 0.95 تقريبًا try { await IosLiveActivityService.updateRideActivity( status: status, driverName: status == 'waiting' ? 'السائق في الطريق' : 'السائق معك', carDetails: "تويوتا • أسود", etaText: eta, progress: progress, ); Log.print( "✅ تم تحديث Live Activity: status=$status, eta=$eta, progress=$progress"); } catch (e) { Log.print("❌ خطأ في Update Live Activity: $e"); } }, child: const Text('Update (Random)'), ), const SizedBox(height: 16), // زر الإنهاء ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: Colors.red, ), onPressed: () async { Log.print("🛑 محاولة إنهاء Live Activity (End)..."); try { await IosLiveActivityService.endRideActivity(); Log.print("✅ تم إنهاء Live Activity."); } catch (e) { Log.print("❌ خطأ في End Live Activity: $e"); } }, child: const Text('End Activity'), ), ], ), ), ); } }