import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:sefer_driver/controller/profile/captain_profile_controller.dart'; import 'package:sefer_driver/views/auth/captin/criminal_documents_page.dart'; import 'package:sefer_driver/views/widgets/my_scafold.dart'; import 'package:sefer_driver/views/widgets/mycircular.dart'; import 'package:sefer_driver/views/widgets/mydialoug.dart'; import 'behavior_page.dart'; import 'captains_cars.dart'; // الصفحة الرئيسية الجديدة class ProfileCaptain extends StatelessWidget { const ProfileCaptain({super.key}); @override Widget build(BuildContext context) { // Get.put() يجب أن يكون في مكان يتم استدعاؤه مرة واحدة فقط، // لكن سنبقيه هنا حسب الكود الأصلي final controller = Get.put(CaptainProfileController()); return MyScafolld( title: 'My Profile'.tr, isleading: true, body: [ GetBuilder( builder: (controller) { if (controller.isLoading) { return const Center(child: MyCircularProgressIndicator()); } if (controller.captainProfileData.isEmpty) { return Center(child: Text('Failed to load profile data.'.tr)); } return SingleChildScrollView( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 20.0), child: Column( children: [ // 1. رأس الصفحة: صورة واسم وتقييم ProfileHeader( name: '${controller.captainProfileData['first_name'] ?? ''} ${controller.captainProfileData['last_name'] ?? ''}', rating: controller.captainProfileData['ratingDriver'] != null ? double.tryParse(controller .captainProfileData['ratingDriver'] .toString()) ?? 0.0 : 0.0, ratingCount: int.tryParse(controller .captainProfileData['ratingCount'] .toString()) ?? 0, ), const SizedBox(height: 24), // 2. قسم الإجراءات السريعة ActionsGrid(), const SizedBox(height: 24), // 3. بطاقة المعلومات الشخصية PersonalInfoCard( data: controller.captainProfileData .cast()), const SizedBox(height: 16), // 4. بطاقة معلومات المركبة (قابلة للتوسيع) VehicleInfoCard( data: controller.captainProfileData .cast()), ], ), ); }, ), ], ); } } // --- الويدجتس الجديدة المنفصلة لتحسين التصميم --- /// 1. ويدجت رأس الصفحة class ProfileHeader extends StatelessWidget { final String name; final double rating; final int ratingCount; const ProfileHeader({ super.key, required this.name, required this.rating, required this.ratingCount, }); @override Widget build(BuildContext context) { return Column( children: [ CircleAvatar( radius: 50, backgroundColor: Get.theme.primaryColor.withOpacity(0.1), child: Icon(Icons.person, size: 60, color: Get.theme.primaryColor), ), const SizedBox(height: 12), Text( name, style: Get.textTheme.headlineSmall ?.copyWith(fontWeight: FontWeight.bold), ), const SizedBox(height: 8), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.star, color: Colors.amber, size: 20), const SizedBox(width: 4), Text( '${rating.toStringAsFixed(1)} (${'reviews'.tr} $ratingCount)', style: Get.textTheme.titleMedium ?.copyWith(color: Colors.grey.shade600), ), ], ), ], ); } } /// 2. ويدجت شبكة الأزرار class ActionsGrid extends StatelessWidget { const ActionsGrid({super.key}); @override Widget build(BuildContext context) { return GridView.count( crossAxisCount: 2, shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), crossAxisSpacing: 16, mainAxisSpacing: 16, childAspectRatio: 2.5, // للتحكم في ارتفاع الأزرار children: [ // _ActionTile( // title: 'My Cars'.tr, // icon: Icons.directions_car_filled, // onTap: () => Get.to(() => CaptainsCars()), // ), // _ActionTile( // title: 'Criminal Record'.tr, // icon: Icons.description, // onTap: () => Get.to(() => CriminalDocumemtPage()), // ), _ActionTile( title: 'Bank Account'.tr, icon: Icons.account_balance, onTap: () { MyDialog().getDialog('Coming Soon'.tr, 'This service will be available soon.'.tr, () => Get.back()); }, ), _ActionTile( title: 'Behavior Page'.tr, icon: Icons.checklist_rtl, onTap: () => Get.to(() => BehaviorPage()), ), ], ); } } /// ويدجت داخلية لزر في الشبكة class _ActionTile extends StatelessWidget { final String title; final IconData icon; final VoidCallback onTap; const _ActionTile( {required this.title, required this.icon, required this.onTap}); @override Widget build(BuildContext context) { return Material( color: Colors.grey.shade100, borderRadius: BorderRadius.circular(12), child: InkWell( onTap: onTap, borderRadius: BorderRadius.circular(12), child: Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(icon, color: Get.theme.primaryColor, size: 20), const SizedBox(width: 8), Flexible( child: Text( title, style: Get.textTheme.labelLarge, textAlign: TextAlign.center, )), ], ), ), ), ); } } /// 3. بطاقة المعلومات الشخصية class PersonalInfoCard extends StatelessWidget { final Map data; PersonalInfoCard({super.key, required this.data}); final controller = Get.find(); @override Widget build(BuildContext context) { return Card( elevation: 2, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('Personal Information'.tr, style: Get.textTheme.titleLarge), const Divider(height: 24), _InfoRow( icon: Icons.phone, label: 'Phone Number'.tr, value: data['phone'] ?? ''), if (data['email'] != null && data['email'].toString().contains('intaleqapp')) ...[ TextFormField( controller: controller.emailController, keyboardType: TextInputType.emailAddress, // ✅ لوحة مفاتيح خاصة بالإيميل decoration: InputDecoration( border: OutlineInputBorder(), labelText: 'Email'.tr, hintText: 'Enter your email'.tr, prefixIcon: Icon(Icons.email), ), autofillHints: [ AutofillHints.email ], // اختياري لتحسين تجربة المستخدم ), const SizedBox(height: 10), ElevatedButton( onPressed: () async { await controller.updateEmail(); }, child: Text('Update'.tr), ), ] else _InfoRow( icon: Icons.email, label: 'Email'.tr, value: data['email'] ?? '', ), _InfoRow( icon: Icons.cake, label: 'Age'.tr, value: data['age']?.toString() ?? 'N/A'), _InfoRow( icon: Icons.wc, label: 'Gender'.tr, value: data['gender'] ?? 'N/A'), ], ), ), ); } } /// 4. بطاقة معلومات المركبة class VehicleInfoCard extends StatelessWidget { final Map data; const VehicleInfoCard({super.key, required this.data}); @override Widget build(BuildContext context) { return Card( elevation: 2, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), child: ExpansionTile( title: Text('Vehicle Details'.tr, style: Get.textTheme.titleLarge), leading: Icon(Icons.directions_car, color: Get.theme.primaryColor), childrenPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), children: [ _InfoRow( icon: Icons.branding_watermark, label: 'Make'.tr, value: data['make'] ?? ''), _InfoRow( icon: Icons.category, label: 'Model'.tr, value: data['model'] ?? ''), _InfoRow( icon: Icons.palette, label: 'Color'.tr, value: data['color'] ?? ''), _InfoRow( icon: Icons.pin, label: 'Plate Number'.tr, value: data['car_plate'] ?? ''), _InfoRow( icon: Icons.confirmation_number, label: 'VIN'.tr, value: data['vin'] ?? ''), _InfoRow( icon: Icons.event, label: 'Expiration Date'.tr, value: data['expiration_date'] ?? ''), ], ), ); } } /// ويدجت لعرض سطر معلومة (أيقونة + عنوان + قيمة) لتجنب التكرار class _InfoRow extends StatelessWidget { final IconData icon; final String label; final String value; const _InfoRow( {required this.icon, required this.label, required this.value}); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), child: Row( children: [ Icon(icon, color: Colors.grey.shade500, size: 20), const SizedBox(width: 16), Text(label, style: Get.textTheme.bodyLarge), const Spacer(), Flexible( child: Text( value, style: Get.textTheme.bodyLarge?.copyWith( color: Colors.grey.shade700, fontWeight: FontWeight.w500), textAlign: TextAlign.end, ), ), ], ), ); } }