This commit is contained in:
Hamza-Ayed
2024-05-30 20:17:22 +03:00
parent 4bff08f2e7
commit 02fdf8b0f1
9 changed files with 310 additions and 241 deletions

View File

@@ -2,8 +2,9 @@ import 'package:flutter/material.dart';
class AppColor { class AppColor {
static const Color primaryColor = Colors.black; // Slightly softer red static const Color primaryColor = Colors.black; // Slightly softer red
static const Color secondaryColor = Colors.white; static const Color secondaryColor = Color.fromARGB(255, 255, 255, 255);
static const Color accentColor = Color(0xFFD81F26); // Google Green static const Color accentColor =
Color.fromARGB(255, 185, 169, 169); // Google Green
static const Color backgroundColor = static const Color backgroundColor =
Color(0xFFF5F5F5); // Light grey background Color(0xFFF5F5F5); // Light grey background
static const Color redColor = Color(0xFFEA4335); // Google Red static const Color redColor = Color(0xFFEA4335); // Google Red

View File

@@ -91,8 +91,8 @@ class RegisterCaptainController extends GetxController {
'token_code': randomNumber.toString(), 'token_code': randomNumber.toString(),
}); });
// await smsEgyptController.sendSmsEgypt( await smsEgyptController.sendSmsEgypt(
// phoneController.text.toString(), randomNumber.toString()); phoneController.text.toString(), randomNumber.toString());
isSent = true; isSent = true;
isLoading = false; isLoading = false;
update(); update();

View File

@@ -15,10 +15,10 @@ class SmsEgyptController extends GetxController {
Future<dynamic> sendSmsEgypt(String phone, otp) async { Future<dynamic> sendSmsEgypt(String phone, otp) async {
var body = jsonEncode({ var body = jsonEncode({
"username": AppInformation.appName, "username": AppInformation.appName,
"password": 'E)Pu=an/@Z', // AK.smsPasswordEgypt, "password": AK.smsPasswordEgypt, //'E)Pu=an/@Z',
"message": "${AppInformation.appName} app code is $otp\ncopy it to app", "message": "${AppInformation.appName} app code is $otp\ncopy it to app",
"language": box.read(BoxName.lang) == 'en' ? "e" : 'r', "language": box.read(BoxName.lang) == 'en' ? "e" : 'r',
"sender": "Kazumi", // todo add sefer sender name "sender": "Sefer", // todo add sefer sender name
"receiver": "2$phone" "receiver": "2$phone"
}); });
@@ -64,7 +64,7 @@ class SmsEgyptController extends GetxController {
"password": AK.smsPasswordEgypt, "password": AK.smsPasswordEgypt,
"message": "This is an example SMS message.", "message": "This is an example SMS message.",
"language": box.read(BoxName.lang) == 'en' ? "e" : 'r', "language": box.read(BoxName.lang) == 'en' ? "e" : 'r',
"sender": "Kazumi", // todo add sefer sender name "sender": "Sefer", //"Kazumi", // todo add sefer sender name
"receiver": "2$phone", "receiver": "2$phone",
"validity": "10", "validity": "10",
"StartTime": DateTime.now().toString() // "1/1/2024 10:00:00" "StartTime": DateTime.now().toString() // "1/1/2024 10:00:00"

View File

@@ -387,9 +387,10 @@ class MapDriverController extends GetxController {
Get.back(); Get.back();
})); }));
} else { } else {
double costOfWaiting5Minute = double costOfWaiting5Minute = box.read(BoxName.countryCode) == 'Egypt'
(distanceBetweenDriverAndPassengerWhenConfirm * .08) + ? (distanceBetweenDriverAndPassengerWhenConfirm * .08) + (5 * 1)
(5 * 1); //for Eygpt other like jordan .06 per minute : (distanceBetweenDriverAndPassengerWhenConfirm * .06) +
(5 * .06); //for Eygpt other like jordan .06 per minute
var res = await CRUD().post(link: AppLink.addDriverpayment, payload: { var res = await CRUD().post(link: AppLink.addDriverpayment, payload: {
'rideId': rideId, 'rideId': rideId,
'amount': costOfWaiting5Minute.toString(), 'amount': costOfWaiting5Minute.toString(),
@@ -516,6 +517,7 @@ class MapDriverController extends GetxController {
'price': price.toString(), 'price': price.toString(),
}); });
// Get.back(); // Get.back();
// }
} }
void cancelCheckRideFromPassenger() async { void cancelCheckRideFromPassenger() async {

View File

@@ -4,6 +4,13 @@ class MyTranslation extends Translations {
@override @override
Map<String, Map<String, String>> get keys => { Map<String, Map<String, String>> get keys => {
"ar": { "ar": {
"Total price from ": "إجمالي السعر من ",
"Wallet Add": "إضافة إلى المحفظة",
"Press here": "اضغط هنا",
"Would the passenger like to settle the remaining fare using their wallet?":
"هل يرغب الراكب بسداد باقي الأجرة باستخدام محفظته؟",
"How much Passenger pay?": "كم يدفع الراكب؟",
"passenger amount to me": "مبلغ الراكب لي",
"Please wait": "الرجاء الانتظار", "Please wait": "الرجاء الانتظار",
"minutes before trying again.": " دقيقة قبل المحاولة مرة أخرى.", "minutes before trying again.": " دقيقة قبل المحاولة مرة أخرى.",
"Total rides on month": "إجمالي الرحلات في الشهر", "Total rides on month": "إجمالي الرحلات في الشهر",

View File

@@ -14,8 +14,10 @@ import 'package:SEFER/views/widgets/elevated_btn.dart';
class RateController extends GetxController { class RateController extends GetxController {
double selectedRateItemId = -1; double selectedRateItemId = -1;
TextEditingController comment = TextEditingController(); TextEditingController comment = TextEditingController();
TextEditingController passenggerPayAmount = TextEditingController();
String? rideId, passengerId, driverId, price; String? rideId, passengerId, driverId, price;
late GlobalKey<FormState> formKey; late GlobalKey<FormState> formKey;
bool ispassengerWantWalletFromDriver = false;
@override @override
void onInit() { void onInit() {
formKey = GlobalKey<FormState>(); formKey = GlobalKey<FormState>();
@@ -27,6 +29,28 @@ class RateController extends GetxController {
super.onInit(); super.onInit();
} }
void passengerWantPay() {
ispassengerWantWalletFromDriver = true;
update();
}
Future addPassengerWallet() async {
if (formKey.currentState!.validate()) {
var priceOfTrip =
double.parse(Get.find<MapDriverController>().paymentAmount);
double remainingFee =
double.parse(passenggerPayAmount.text) - priceOfTrip;
await CRUD().post(link: AppLink.addPassengersWallet, payload: {
'passenger_id': passengerId,
'balance': remainingFee.toString()
}).then((value) {
if (value != 'failure') {
Get.snackbar('Wallet Add', '');
}
});
}
}
void selectRateItem(double id) { void selectRateItem(double id) {
selectedRateItemId = id; selectedRateItemId = id;
update(); update();

View File

@@ -1,5 +1,7 @@
import 'package:SEFER/controller/home/captin/map_driver_controller.dart'; import 'package:SEFER/controller/home/captin/map_driver_controller.dart';
import 'package:SEFER/views/widgets/my_textField.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:SEFER/constant/colors.dart'; import 'package:SEFER/constant/colors.dart';
@@ -91,6 +93,59 @@ class RatePassenger extends StatelessWidget {
], ],
)), )),
), ),
controller.ispassengerWantWalletFromDriver
? Container(
decoration: AppStyle.boxDecoration1,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Text(
"How much Passenger pay?".tr,
style: AppStyle.title,
),
Form(
key: controller.formKey,
child: MyTextForm(
controller:
controller.passenggerPayAmount,
label: "passenger amount to me".tr,
hint: "passenger amount to me".tr,
type:
const TextInputType.numberWithOptions(
decimal: true)),
),
MyElevatedButton(
title: "Press here".tr,
onPressed: () {
controller.addPassengerWallet();
})
],
),
),
)
: Container(
width: Get.width * .73,
decoration: AppStyle.boxDecoration1,
child: Column(
children: [
Text(
"Would the passenger like to settle the remaining fare using their wallet?"
.tr,
style: AppStyle.title,
textAlign: TextAlign.center,
),
MyElevatedButton(
title: "Press here".tr,
onPressed: () {
controller.passengerWantPay();
})
],
),
),
const SizedBox(
height: 20,
),
Center( Center(
child: RatingBar.builder( child: RatingBar.builder(
initialRating: 0, initialRating: 0,

View File

@@ -3,7 +3,6 @@ import 'package:SEFER/constant/links.dart';
import 'package:SEFER/constant/style.dart'; import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:SEFER/views/notification/available_rides_page.dart'; import 'package:SEFER/views/notification/available_rides_page.dart';
import 'package:SEFER/views/widgets/mycircular.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -25,22 +24,104 @@ class DrawerCaptain extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
String writeText(int times) {
return '*' * times;
}
return Drawer( return Drawer(
child: ListView( child: ListView(
padding: EdgeInsets.zero,
children: [ children: [
// Other drawer items const UserAccountHeader(),
UserAccountsDrawerHeader( _buildDivider(),
decoration: const BoxDecoration( _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, color: AppColor.greenColor,
gradient: LinearGradient( gradient: LinearGradient(
colors: [ colors: AppColor.gradientStartEnd,
AppColor.primaryColor,
AppColor.secondaryColor,
],
begin: Alignment.topLeft, begin: Alignment.topLeft,
end: Alignment.bottomRight, end: Alignment.bottomRight,
), ),
@@ -53,33 +134,34 @@ class DrawerCaptain extends StatelessWidget {
children: [ children: [
Text( Text(
box.read(BoxName.nameDriver).toString(), box.read(BoxName.nameDriver).toString(),
style: AppStyle.title, style: AppStyle.title.copyWith(color: AppColor.backgroundColor),
), ),
const Spacer(), const Spacer(),
Column( Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( Text(
Get.find<HomeCaptainController>().rating.toString(), Get.find<HomeCaptainController>().rating.toString(),
style: AppStyle.number.copyWith(color: Colors.amber), style: AppStyle.number.copyWith(color: Colors.amber),
), ),
Container( Container(
// width: Get.width * .4, padding:
padding: const EdgeInsets.symmetric( const EdgeInsets.symmetric(horizontal: 4, vertical: 1),
horizontal: 4, vertical: 1),
color: AppColor.greenColor, color: AppColor.greenColor,
child: RatingBar.builder( child: RatingBar.builder(
initialRating: 5, initialRating: double.parse(
Get.find<HomeCaptainController>().rating.toString()),
minRating: 1, minRating: 1,
direction: Axis.horizontal, direction: Axis.horizontal,
itemCount: 5, itemCount: 5,
itemSize: 20, itemSize: 20,
itemPadding: itemPadding: const EdgeInsets.symmetric(horizontal: 2),
const EdgeInsets.symmetric(horizontal: 2),
itemBuilder: (context, _) => const Icon( itemBuilder: (context, _) => const Icon(
Icons.star, Icons.star,
color: Colors.amber, color: Colors.amber,
), ),
onRatingUpdate: (rating) {}), onRatingUpdate: (rating) {},
),
), ),
], ],
), ),
@@ -90,133 +172,34 @@ class DrawerCaptain extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 10), padding: const EdgeInsets.symmetric(horizontal: 10),
child: Text( child: Text(
box.read(BoxName.emailDriver), box.read(BoxName.emailDriver),
style: AppStyle.title, style: AppStyle.title.copyWith(color: AppColor.backgroundColor),
), ),
), ),
currentAccountPicture: Stack( currentAccountPicture:
children: [
GetBuilder<ImageController>(builder: (imageController) { GetBuilder<ImageController>(builder: (imageController) {
return imageController.isloading return Stack(
? const MyCircularProgressIndicator() children: [
imageController.isloading
? const CircularProgressIndicator()
: CircleAvatar( : CircleAvatar(
radius: 45, radius: 45,
backgroundImage: NetworkImage( backgroundImage: NetworkImage(
'${AK.serverPHP}/portrate_captain_image/${box.read(BoxName.driverID)}.jpg'), '${AK.serverPHP}/portrate_captain_image/${box.read(BoxName.driverID)}.jpg',
); ),
}), ),
Positioned( Positioned(
right: 0, right: 0,
top: 0, top: 0,
child: IconButton( child: IconButton(
onPressed: () { onPressed: () {
imageController.choosImage( imageController.choosImage(AppLink.uploadImage1, 'portrait');
AppLink.uploadImage1, 'portrait');
}, },
icon: const Icon(Icons.edit), icon: const Icon(Icons.edit),
), ),
), ),
], ],
), );
), }),
ListTile(
leading: const Icon(Icons.account_balance_wallet),
title: Text(
'Wallet'.tr,
style: AppStyle.title,
),
onTap: () {
// Handle wallet item tap
Get.to(() => WalletCaptain(), transition: Transition.native);
},
),
ListTile(
leading: const Icon(Icons.person),
title: Text(
'Profile'.tr,
style: AppStyle.title,
),
onTap: () {
// Handle profile item tap
Get.to(() => const ProfileCaptain(),
transition: Transition.rightToLeftWithFade);
},
),
ListTile(
leading: const Icon(
Icons.history,
),
title: Text(
'History of Trip'.tr,
style: AppStyle.title,
),
onTap: () {
Get.to(() => const HistoryCaptain(),
transition: Transition.downToUp);
// Handle history of trip item tap
},
),
ListTile(
leading: const Icon(Icons.phonelink_ring_rounded),
title: Text(
'Available for rides'.tr,
style: AppStyle.title,
),
onTap: () {
Get.to(() => const AvailableRidesPage(),
transition: Transition.rightToLeftWithFade);
// Handle history of trip item tap
},
),
ListTile(
leading: const Icon(Icons.notifications),
title: Text(
'Notifications'.tr,
style: AppStyle.title,
),
onTap: () {
// Handle notifications item tap
Get.to(() => const NotificationCaptain(),
transition: Transition.upToDown);
},
),
ListTile(
leading: const Icon(Icons.help),
title: Text(
'Helping Center'.tr,
style: AppStyle.title,
),
onTap: () {
// Handle helping center item tap
Get.to(() => HelpCaptain(), transition: Transition.size);
},
),
ListTile(
leading: const Icon(Icons.settings),
title: Text(
'Settings'.tr,
style: AppStyle.title,
),
onTap: () {
// Handle settings item tap
Get.to(() => const SettingsCaptain(),
transition: Transition.cupertino);
},
),
ListTile(
leading: const Icon(Icons.exit_to_app),
title: Text(
'Sign Out'.tr,
style: AppStyle.title,
),
onTap: () {
// Handle sign out item tap
Get.to(() => const LogoutCaptain(),
transition: Transition.cupertinoDialog);
},
),
],
),
); );
} }
} }

View File

@@ -120,12 +120,36 @@ GetBuilder<MapDriverController> driverEndRideBar() {
], ],
) )
: const SizedBox(), : const SizedBox(),
(mapDriverController.carType == 'Mashwari' || // (mapDriverController.carType == 'Mashwari' ||
mapDriverController.carType == 'Comfort') && // mapDriverController.carType == 'Comfort' ||
mapDriverController.remainingTimeTimerRideBegin > 60 // mapDriverController.carType == 'lady') &&
? Row( // mapDriverController.remainingTimeTimerRideBegin > 60
// ? Row(
// mainAxisAlignment: MainAxisAlignment.spaceAround,
// children: [
// MyElevatedButton(
// title: 'End Ride'.tr,
// onPressed: () {
// mapDriverController.finishRideFromDriver();
// },
// kolor: AppColor.redColor,
// ),
// Container(
// decoration: AppStyle.boxDecoration1,
// child: Text(
// mapDriverController.carType,
// style: AppStyle.title,
// ),
// )
// ],
// )
// :
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround, mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [ children: [
// mapDriverController.remainingTimeTimerRideBegin <
// 60
// ?
MyElevatedButton( MyElevatedButton(
title: 'End Ride'.tr, title: 'End Ride'.tr,
onPressed: () { onPressed: () {
@@ -133,35 +157,7 @@ GetBuilder<MapDriverController> driverEndRideBar() {
}, },
kolor: AppColor.redColor, kolor: AppColor.redColor,
), ),
Container( // : const SizedBox(),
decoration: AppStyle.boxDecoration1,
child: InkWell(
onTap: () {
print(Get.find<HomeCaptainController>()
.comfortPrice);
},
child: Text(
mapDriverController.carType,
style: AppStyle.title,
),
),
)
],
)
: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
mapDriverController.remainingTimeTimerRideBegin <
60
? MyElevatedButton(
title: 'End Ride'.tr,
onPressed: () {
mapDriverController
.finishRideFromDriver();
},
kolor: AppColor.redColor,
)
: const SizedBox(),
Container( Container(
decoration: AppStyle.boxDecoration1, decoration: AppStyle.boxDecoration1,
child: Text( child: Text(
@@ -172,7 +168,8 @@ GetBuilder<MapDriverController> driverEndRideBar() {
], ],
), ),
mapDriverController.carType != 'Comfort' && mapDriverController.carType != 'Comfort' &&
mapDriverController.carType != 'Mashwari' mapDriverController.carType != 'Mashwari' &&
mapDriverController.carType != 'Lady'
? Stack( ? Stack(
children: [ children: [
SizedBox( SizedBox(