206 lines
6.8 KiB
Dart
206 lines
6.8 KiB
Dart
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/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/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';
|
|
|
|
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(() => const 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.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<HomeCaptainController>().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<HomeCaptainController>().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<ImageController>(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.choosImage(AppLink.uploadImage1, 'portrait');
|
|
},
|
|
icon: const Icon(Icons.edit),
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}),
|
|
);
|
|
}
|
|
}
|