import 'package:SEFER/constant/api_key.dart'; import 'package:SEFER/constant/links.dart'; import 'package:SEFER/constant/style.dart'; import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:SEFER/views/auth/captin/contact_us_page.dart'; import 'package:SEFER/views/auth/captin/invite_driver_screen.dart'; import 'package:SEFER/views/notification/available_rides_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:get/get.dart'; import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/colors.dart'; import 'package:SEFER/main.dart'; import 'package:SEFER/views/auth/captin/logout_captain.dart'; import 'package:SEFER/views/home/Captin/history/history_captain.dart'; import 'package:SEFER/views/home/Captin/home_captain/help_captain.dart'; import 'package:SEFER/views/home/Captin/About%20Us/settings_captain.dart'; import 'package:SEFER/views/home/my_wallet/walet_captain.dart'; import 'package:SEFER/views/home/profile/profile_captain.dart'; import 'package:SEFER/views/notification/notification_captain.dart'; import '../../../../controller/functions/upload_image.dart'; import '../maintain_center_page.dart'; class DrawerCaptain extends StatelessWidget { ImageController imageController = Get.put(ImageController()); @override Widget build(BuildContext context) { return Drawer( child: ListView( padding: EdgeInsets.zero, children: [ const UserAccountHeader(), _buildDivider(), _buildDrawerItem( icon: Icons.account_balance_wallet, text: 'Wallet'.tr, onTap: () => Get.to(() => WalletCaptain(), transition: Transition.native), ), _buildDivider(), _buildDrawerItem( icon: Icons.person, text: 'Profile'.tr, onTap: () => Get.to(() => ProfileCaptain(), transition: Transition.rightToLeftWithFade), ), _buildDivider(), _buildDrawerItem( icon: Icons.history, text: 'History of Trip'.tr, onTap: () => Get.to(() => const HistoryCaptain(), transition: Transition.downToUp), ), _buildDivider(), _buildDrawerItem( icon: Icons.phonelink_ring_rounded, text: 'Available for rides'.tr, onTap: () => Get.to(() => const AvailableRidesPage(), transition: Transition.rightToLeftWithFade), ), _buildDivider(), _buildDrawerItem( icon: Icons.notifications, text: 'Notifications'.tr, onTap: () => Get.to(() => const NotificationCaptain(), transition: Transition.upToDown), ), _buildDivider(), _buildDrawerItem( icon: Icons.help, text: 'Helping Center'.tr, onTap: () => Get.to(() => HelpCaptain(), transition: Transition.size), ), _buildDivider(), _buildDrawerItem( icon: Icons.share_outlined, text: 'Share App'.tr, onTap: () => Get.to(() => InviteDriverScreen(), transition: Transition.size), ), _buildDivider(), _buildDrawerItem( icon: Icons.car_repair_outlined, text: "Maintenance Center".tr, onTap: () => Get.to(() => MaintainCenterPage(), transition: Transition.size), ), _buildDivider(), _buildDrawerItem( icon: Icons.contact_mail_rounded, text: "Contact Us".tr, onTap: () => Get.to(() => ContactUsPage(), transition: Transition.cupertino), ), _buildDivider(), _buildDrawerItem( icon: Icons.settings, text: 'Settings'.tr, onTap: () => Get.to(() => const SettingsCaptain(), transition: Transition.cupertino), ), _buildDivider(), _buildDrawerItem( icon: Icons.exit_to_app, text: 'Sign Out'.tr, onTap: () => Get.to(() => const LogoutCaptain(), transition: Transition.cupertinoDialog), ), _buildDivider(), ], ), ); } Widget _buildDivider() { return const Divider( thickness: 1, height: 1, color: AppColor.accentColor, ); } Widget _buildDrawerItem({ required IconData icon, required String text, required GestureTapCallback onTap, }) { return ListTile( leading: Icon(icon, color: AppColor.accentColor), title: Text(text, style: AppStyle.title), onTap: onTap, ); } } class UserAccountHeader extends StatelessWidget { const UserAccountHeader({super.key}); @override Widget build(BuildContext context) { return UserAccountsDrawerHeader( decoration: BoxDecoration( color: AppColor.greenColor, gradient: LinearGradient( colors: AppColor.gradientStartEnd, begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), currentAccountPictureSize: const Size.square(100), arrowColor: AppColor.deepPurpleAccent, accountName: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), child: Row( children: [ Text( box.read(BoxName.nameDriver).toString(), style: AppStyle.title.copyWith(color: AppColor.secondaryColor), ), const Spacer(), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( Get.find().rating.toString(), style: AppStyle.number.copyWith(color: Colors.amber), ), Container( padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 1), color: AppColor.greenColor, child: RatingBar.builder( initialRating: double.parse( Get.find().rating.toString()), minRating: 1, direction: Axis.horizontal, itemCount: 5, itemSize: 20, itemPadding: const EdgeInsets.symmetric(horizontal: 2), itemBuilder: (context, _) => const Icon( Icons.star, color: Colors.amber, ), onRatingUpdate: (rating) {}, ), ), ], ), ], ), ), accountEmail: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), child: Text( box.read(BoxName.emailDriver), style: AppStyle.title.copyWith(color: AppColor.secondaryColor), ), ), currentAccountPicture: GetBuilder(builder: (imageController) { return Stack( children: [ imageController.isloading ? const CircularProgressIndicator() : CircleAvatar( radius: 45, backgroundImage: NetworkImage( '${AK.serverPHP}/portrate_captain_image/${box.read(BoxName.driverID)}.jpg', ), ), Positioned( right: 0, top: 0, child: IconButton( onPressed: () { imageController.choosImagePicture( AppLink.uploadImage1, 'portrait'); }, icon: const Icon(Icons.edit), ), ), ], ); }), ); } }