This commit is contained in:
Hamza-Ayed
2024-09-20 20:03:54 +03:00
parent b09e0da403
commit 519f4b651c
20 changed files with 935 additions and 831 deletions

View File

@@ -1,6 +1,5 @@
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';
@@ -9,7 +8,6 @@ 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';
@@ -19,98 +17,97 @@ 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 '../../../../constant/colors.dart';
import '../../../../controller/functions/upload_image.dart';
import '../maintain_center_page.dart';
import 'package:flutter/cupertino.dart';
class DrawerCaptain extends StatelessWidget {
ImageController imageController = Get.put(ImageController());
class CupertinoDrawerCaptain extends StatelessWidget {
final 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(),
],
return CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(
middle: Text('Menu'.tr),
),
child: SafeArea(
child: CustomScrollView(
slivers: [
const SliverToBoxAdapter(child: const UserAccountHeader()),
SliverList(
delegate: SliverChildListDelegate([
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.money_dollar,
text: 'Wallet'.tr,
onTap: () => Get.to(() => WalletCaptain()),
),
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.person,
text: 'Profile'.tr,
onTap: () => Get.to(() => ProfileCaptain()),
),
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.clock,
text: 'History of Trip'.tr,
onTap: () => Get.to(() => const HistoryCaptain()),
),
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.car_detailed,
text: 'Available for rides'.tr,
onTap: () => Get.to(() => const AvailableRidesPage()),
),
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.bell,
text: 'Notifications'.tr,
onTap: () => Get.to(() => const NotificationCaptain()),
),
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.question_circle,
text: 'Helping Center'.tr,
onTap: () => Get.to(() => HelpCaptain()),
),
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.share,
text: 'Share App'.tr,
onTap: () => Get.to(() => InviteDriverScreen()),
),
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.wrench,
text: "Maintenance Center".tr,
onTap: () => Get.to(() => MaintainCenterPage()),
),
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.mail,
text: "Contact Us".tr,
onTap: () => Get.to(() => ContactUsPage()),
),
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.settings,
text: 'Settings'.tr,
onTap: () => Get.to(() => const SettingsCaptain()),
),
_buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.square_arrow_right,
text: 'Sign Out'.tr,
onTap: () => Get.to(() => const LogoutCaptain()),
),
_buildDivider(),
]),
),
],
),
),
);
}
@@ -119,19 +116,27 @@ class DrawerCaptain extends StatelessWidget {
return const Divider(
thickness: 1,
height: 1,
color: AppColor.accentColor,
color: CupertinoColors.systemGrey4,
);
}
Widget _buildDrawerItem({
required IconData icon,
required String text,
required GestureTapCallback onTap,
required VoidCallback onTap,
}) {
return ListTile(
leading: Icon(icon, color: AppColor.accentColor),
title: Text(text, style: AppStyle.title),
onTap: onTap,
return CupertinoButton(
onPressed: onTap,
child: Row(
children: [
Icon(icon, color: CupertinoColors.activeBlue),
const SizedBox(width: 10),
Text(text, style: const TextStyle(color: CupertinoColors.label)),
const Spacer(),
const Icon(CupertinoIcons.right_chevron,
color: CupertinoColors.systemGrey),
],
),
);
}
}
@@ -141,90 +146,102 @@ class UserAccountHeader extends StatelessWidget {
@override
Widget build(BuildContext context) {
return UserAccountsDrawerHeader(
decoration: BoxDecoration(
color: AppColor.greenColor,
return Container(
padding: const EdgeInsets.all(16),
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: AppColor.gradientStartEnd,
colors: [AppColor.blueColor, AppColor.twitterColor],
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',
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GetBuilder<ImageController>(
builder: (imageController) {
return Stack(
children: [
imageController.isloading
? const CupertinoActivityIndicator()
: Container(
width: 100,
height: 100,
decoration: BoxDecoration(
shape: BoxShape.circle,
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(
'${AK.serverPHP}/portrate_captain_image/${box.read(BoxName.driverID)}.jpg',
),
),
),
),
Positioned(
right: 0,
top: 0,
child: CupertinoButton(
onPressed: () {
imageController.choosImagePicture(
AppLink.uploadImage1, 'portrait');
},
child: const Icon(CupertinoIcons.pencil_circle_fill,
color: CupertinoColors.white),
),
),
Positioned(
right: 0,
top: 0,
child: IconButton(
onPressed: () {
imageController.choosImagePicture(
AppLink.uploadImage1, 'portrait');
},
icon: const Icon(Icons.edit),
],
);
},
),
const SizedBox(height: 10),
Text(
box.read(BoxName.nameDriver).toString(),
style: const TextStyle(
color: CupertinoColors.white,
fontSize: 18,
fontWeight: FontWeight.bold),
),
const SizedBox(height: 5),
Text(
box.read(BoxName.emailDriver),
style: const TextStyle(color: CupertinoColors.white, fontSize: 14),
),
const SizedBox(height: 10),
Row(
children: [
Text(
Get.find<HomeCaptainController>().rating.toString(),
style: const TextStyle(
color: CupertinoColors.systemYellow, fontSize: 16),
),
),
],
);
}),
const SizedBox(width: 5),
// You might want to replace this with a Cupertino-style rating widget
// For now, we'll use text to represent stars
// const Text('★★★★★',
// style: TextStyle(color: CupertinoColors.systemYellow)),
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) {},
),
),
],
),
],
),
);
}
}

View File

@@ -1,13 +1,9 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/captin/help/help_controller.dart';
import 'package:SEFER/views/home/Captin/home_captain/help_details_replay_page.dart';
import 'package:SEFER/views/widgets/my_scafold.dart';
import '../../../widgets/elevated_btn.dart';
import '../../../widgets/mycircular.dart';
import 'package:flutter/cupertino.dart';
class HelpCaptain extends StatelessWidget {
HelpCaptain({super.key});
@@ -15,152 +11,159 @@ class HelpCaptain extends StatelessWidget {
@override
Widget build(BuildContext context) {
Get.put(HelpController());
return MyScafolld(
title: 'Helping Page'.tr,
body: [
Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
decoration: AppStyle.boxDecoration1,
child: Padding(
padding: const EdgeInsets.all(8.0),
return CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(
middle: Text('Helping Page'.tr),
leading: CupertinoButton(
padding: EdgeInsets.zero,
child: Icon(CupertinoIcons.back),
onPressed: () => Navigator.pop(context),
),
),
child: SafeArea(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: 12.0),
child: Container(
padding: const EdgeInsets.all(16.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12.0),
border: Border.all(
color: CupertinoColors.systemGrey2,
),
),
child: Text(
'If you need any help or have question this is right site to do that and your welcome'
'If you need any help or have questions, this is the right place to do that. You are welcome!'
.tr,
style: AppStyle.title,
style: CupertinoTheme.of(context).textTheme.textStyle,
textAlign: TextAlign.center,
),
),
),
),
Card(
Card(
elevation: 3,
color: AppColor.secondaryColor,
color: CupertinoColors.systemGrey6,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
child: Padding(
padding: const EdgeInsets.all(8.0),
padding: const EdgeInsets.all(16.0),
child: GetBuilder<HelpController>(
builder: (helpController) => Form(
key: helpController.formKey,
child: Column(
children: [
SizedBox(
width: Get.width * .8,
child: TextFormField(
controller:
helpController.helpQuestionController,
decoration: InputDecoration(
border: const OutlineInputBorder(),
hintText: 'Enter your Question here'.tr,
labelText: 'Question'.tr,
),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter your Question.'.tr;
}
return null;
},
key: helpController.formKey,
child: Column(
children: [
CupertinoTextField(
controller: helpController.helpQuestionController,
placeholder: 'Enter your Question here'.tr,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: CupertinoColors.systemGrey,
),
),
const SizedBox(height: 20),
helpController.isLoading
? const MyCircularProgressIndicator()
: MyElevatedButton(
onPressed: () {
if (helpController.formKey.currentState!
.validate()) {
helpController.addHelpQuestion();
padding: const EdgeInsets.all(16),
clearButtonMode: OverlayVisibilityMode.editing,
),
const SizedBox(height: 20),
helpController.isLoading
? const CupertinoActivityIndicator()
: CupertinoButton.filled(
onPressed: () {
if (helpController.formKey.currentState!
.validate()) {
helpController.addHelpQuestion();
// Clear the feedback form
helpController.formKey.currentState!
.reset();
}
},
title: 'Submit Question'.tr,
),
],
)),
// Clear the feedback form
helpController.formKey.currentState!
.reset();
}
},
child: Text('Submit Question'.tr),
),
],
),
),
),
)),
GetBuilder<HelpController>(
builder: (helpController) => Padding(
padding: const EdgeInsets.all(10),
child: Container(
height: Get.height * .45,
decoration: AppStyle.boxDecoration,
child: ListView.builder(
itemCount:
helpController.helpQuestionDate['message'] != null
? helpController
.helpQuestionDate['message'].length
: 0,
itemBuilder: (BuildContext context, int index) {
// if (helpController.helpQuestionDate['message'] ==
// null) {
// return const CircularProgressIndicator();
// }
var list = helpController
.helpQuestionDate['message'][index];
return helpController
.helpQuestionDate['message'].length ==
0
? SizedBox()
: Padding(
padding: const EdgeInsets.all(3),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: AppColor.greenColor,
width: 3,
),
borderRadius:
BorderRadius.circular(11)),
// elevation: 3,
// color: AppColor.greenColor,
child: GestureDetector(
onTap: () {
helpController.getIndex(
list['id'], list['helpQuestion']);
helpController.getHelpRepley(
list['id'].toString());
Get.to(
() => const HelpDetailsReplayPage(),
);
},
child: Padding(
padding: const EdgeInsets.all(2),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
SizedBox(
width: Get.width * .6,
child: Text(
list['helpQuestion'],
style: AppStyle.title,
),
),
SizedBox(
width: Get.width * .3,
child: Text(
list['datecreated'],
style: AppStyle.subtitle,
),
),
],
),
),
),
),
const SizedBox(height: 20),
Expanded(
child: GetBuilder<HelpController>(
builder: (helpController) => Padding(
padding: const EdgeInsets.all(10),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: CupertinoColors.systemGrey2,
),
borderRadius: BorderRadius.circular(12.0),
),
child: ListView.builder(
itemCount: helpController.helpQuestionDate['message'] !=
null
? helpController.helpQuestionDate['message'].length
: 0,
itemBuilder: (BuildContext context, int index) {
var list =
helpController.helpQuestionDate['message'][index];
return Padding(
padding: const EdgeInsets.all(3),
child: Container(
padding: const EdgeInsets.symmetric(
vertical: 12, horizontal: 16),
decoration: BoxDecoration(
border: Border.all(
color: CupertinoColors.activeGreen,
width: 2,
),
borderRadius: BorderRadius.circular(12),
),
child: GestureDetector(
onTap: () {
helpController.getIndex(
list['id'], list['helpQuestion']);
helpController
.getHelpRepley(list['id'].toString());
Get.to(() => const HelpDetailsReplayPage());
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text(
list['helpQuestion'],
style: CupertinoTheme.of(context)
.textTheme
.textStyle,
overflow: TextOverflow.ellipsis,
),
),
);
},
),
Text(
list['datecreated'],
style: CupertinoTheme.of(context)
.textTheme
.tabLabelTextStyle,
),
],
),
),
),
);
},
),
)),
],
),
),
),
),
],
),
),
],
isleading: true,
),
);
}
}

View File

@@ -67,7 +67,7 @@ class HomeCaptain extends StatelessWidget {
// ),
],
),
drawer: DrawerCaptain(),
drawer: CupertinoDrawerCaptain(),
body: Stack(
children: [
GetBuilder<HomeCaptainController>(

View File

@@ -1,4 +1,5 @@
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/controller/firebase/local_notification.dart';
import 'package:SEFER/main.dart';
import 'package:SEFER/views/auth/captin/cards/egypt_card_a_i.dart';
import 'package:SEFER/views/auth/captin/cards/sms_signup.dart';
@@ -219,13 +220,14 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
// 'Order'.tr,
// 'from: ',
// // jsonDecode(value)['message'].toString(),
// // 'd3JaCCFAQeu8QTxRnlC1sB:APA91bFuRjbVK32obIFYXFTI4iwsZEPrrgwvPouob2bXivID-W4aXz51J_OIJ2nHpNU2ocOvGLD1Ip65rLViAFx5qHVE-c8FabBwBi5fSQ-lDTQfe36xxKsc9DU-sTyj_FoYrrMnLNVi',
// 'dN7B10MgQKOR13R5wnBqTN:APA91bHAlcfrOhxXdMYB8akJeeJzQ4lxfx7UhOpP0dcjGtRdKXSD9x6jiEoz6ULnQK5Hc030_VRUAV6Q8qGj-RmlbLAm4wppc4gv_Ri4oEbHHwONP5c41-341YkVqsFYTCRaHz7VpUoj',
// 'dUEVBJDPQfKiMuGgDjdyfX:APA91bE3DKYAYs3LIxGmzy55-ojLAZWv0ym4a9Zy9UxdkyRUOgQP8bf1WwU9LJAof0DjfaIxciVYPnue7EdwhujzQe67SImfOF9yI1YgGsKLDH6yo6FsFaAYpsbrSCqlaoRp14lLqymi',
// d,
// 'order.wav');
// try {} catch (e) {
// print('Error showing overlay: $e');
// }
// // NotificationController()
// // .showNotification('VIP Order'.tr, '', 'order', '');
// // try {} catch (e) {
// // print('Error showing overlay: $e');
// // }
// // final Bubble _bubble = Bubble(showCloseButton: true);
// // try {
// // await _bubble.startBubbleHead(sendAppToBackground: false);
@@ -254,7 +256,7 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
// );
// }),
// ),
// // AnimatedContainer(
// AnimatedContainer(
// duration: const Duration(microseconds: 200),
// width: controller.widthMapTypeAndTraffic,
// decoration: BoxDecoration(
@@ -264,16 +266,16 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
// child: Builder(builder: (context) {
// return IconButton(
// onPressed: () async {
// // FirebaseMessagesController().sendNotificationToAnyWithoutData(
// // 'Order'.tr,
// // 'from: ',
// // // jsonDecode(value)['message'].toString(),
// // 'dEugS-JOT4Ka5riF4s5TEN:APA91bEDL_W7BuEQGbyL-RMaKiMWDlURXhFuaybe5WurTUV8K5eIooSGe22yY22_U2hEZcfPr46ig1v--l00dbOGiivazxvmTyhUyQQW6lJsuIN-wordGtBxtREyeYtEKvxIa1J4ApEu',
// // 'order.wav'
// FirebaseMessagesController().sendNotificationToAnyWithoutData(
// 'Order'.tr,
// 'from: ',
// // jsonDecode(value)['message'].toString(),
// 'dEugS-JOT4Ka5riF4s5TEN:APA91bEDL_W7BuEQGbyL-RMaKiMWDlURXhFuaybe5WurTUV8K5eIooSGe22yY22_U2hEZcfPr46ig1v--l00dbOGiivazxvmTyhUyQQW6lJsuIN-wordGtBxtREyeYtEKvxIa1J4ApEu',
// 'order.wav'
// // // polylineCoordinates.toString()
// // );
// Get.to(SmsSignupEgypt());
// // polylineCoordinates.toString()
// );
// // Get.to(SmsSignupEgypt());
// // print(AppLink.addDriverPaymentPoints);
// },
// icon: const Icon(