From d6200e28e0073a06bccbf235b997d2a6e1d90427 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Mon, 14 Oct 2024 11:50:33 +0300 Subject: [PATCH] 10/14/1 --- android/app/build.gradle | 4 +- .../home/captin/home_captain_controller.dart | 39 + .../home/captin/map_driver_controller.dart | 136 +-- .../home/captin/order_request_controller.dart | 118 +- lib/controller/local/translations.dart | 6 +- .../home/Captin/home_captain/home_captin.dart | 4 +- .../Captin/home_captain/widget/connect.dart | 6 +- .../orderCaptin/order_speed_request.dart | 1045 +++++++++-------- .../home/my_wallet/card_wallet_widget.dart | 11 +- lib/views/home/my_wallet/walet_captain.dart | 6 +- .../notification/available_rides_page.dart | 138 ++- 11 files changed, 843 insertions(+), 670 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index ec342a6..39e9db8 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -54,8 +54,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdk = 23 targetSdk = flutter.targetSdkVersion - versionCode = 108 - versionName = '1.5.08' + versionCode = 109 + versionName = '1.5.09' multiDexEnabled =true } diff --git a/lib/controller/home/captin/home_captain_controller.dart b/lib/controller/home/captin/home_captain_controller.dart index c52e9ef..7434d14 100644 --- a/lib/controller/home/captin/home_captain_controller.dart +++ b/lib/controller/home/captin/home_captain_controller.dart @@ -257,6 +257,45 @@ class HomeCaptainController extends GetxController { // LocationController().getLocation(); super.onInit(); } + // void getRefusedOrderByCaptain() async { + // // Get today's date in YYYY-MM-DD format + // String today = DateTime.now().toString().substring(0, 10); + + // String driverId = box.read(BoxName.driverID).toString(); + + // String customQuery = ''' + // SELECT COUNT(*) AS count + // FROM ${TableName.driverOrdersRefuse} + // WHERE driver_id = '$driverId' + // AND DATE(created_at) = '$today' + // '''; + + // try { + // List> results = + // await sql.getCustomQuery(customQuery); + // countRefuse = results[0]['count'].toString(); + // print(countRefuse); + // update(); + // if (int.parse(countRefuse) > 3) { + // box.write(BoxName.statusDriverLocation, 'on'); + // locationController.stopLocationUpdates(); + // Get.defaultDialog( + // // backgroundColor: CupertinoColors.destructiveRed, + // barrierDismissible: false, + // title: 'You Are Stopped For this Day !'.tr, + // content: Text( + // 'You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!' + // .tr, + // style: AppStyle.title, + // ), + // confirm: MyElevatedButton( + // title: 'Ok , See you Tomorrow'.tr, + // onPressed: () => Get.back())); + // } else { + // box.write(BoxName.statusDriverLocation, 'off'); + // } + // } catch (e) {} + // } addToken() async { await CRUD().post(link: AppLink.addTokensDriver, payload: { diff --git a/lib/controller/home/captin/map_driver_controller.dart b/lib/controller/home/captin/map_driver_controller.dart index b88e588..5847352 100644 --- a/lib/controller/home/captin/map_driver_controller.dart +++ b/lib/controller/home/captin/map_driver_controller.dart @@ -171,13 +171,20 @@ class MapDriverController extends GetxController { cancelTripFromDriverAfterApplied() async { if (formKeyCancel.currentState!.validate()) { - CRUD().post( + await CRUD().post( link: "${AppLink.seferCairoServer}/ride/rides/update.php", payload: { "id": rideId.toString(), // Convert to String "status": 'CancelFromDriverAfterApply' }); - CRUD().post( + if (AppLink.endPoint != AppLink.seferCairoServer) { + CRUD() + .post(link: "${AppLink.endPoint}/ride/rides/update.php", payload: { + "id": rideId.toString(), // Convert to String + "status": 'CancelFromDriverAfterApply' + }); + } + await CRUD().post( link: "${AppLink.seferCairoServer}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php", payload: { @@ -186,6 +193,17 @@ class MapDriverController extends GetxController { "status": 'reject After Applied', "notes": cancelTripCotroller.text.toString() }); + if (AppLink.endPoint != AppLink.seferCairoServer) { + CRUD().post( + link: + "${AppLink.endPoint}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php", + payload: { + "order_id": rideId.toString(), + "driver_id": box.read(BoxName.driverID).toString(), + "status": 'reject After Applied', + "notes": cancelTripCotroller.text.toString() + }); + } FirebaseMessagesController().sendNotificationToDriverMAP( "Cancel Trip from driver".tr, "Trip Cancelled from driver. We are looking for a new driver. Please wait." @@ -194,44 +212,13 @@ class MapDriverController extends GetxController { [], 'cancel.wav', ); - CRUD().post( - link: "${AppLink.seferGizaServer}/ride/rides/update.php", - payload: { - "id": rideId.toString(), // Convert to String - "status": 'CancelFromDriverAfterApply' - }); - CRUD().post( - link: "${AppLink.seferAlexandriaServer}/ride/rides/update.php", - payload: { - "id": rideId.toString(), // Convert to String - "status": 'CancelFromDriverAfterApply' - }); - - CRUD().post( - link: - "${AppLink.seferGizaServer}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php", - payload: { - "order_id": rideId.toString(), - "driver_id": box.read(BoxName.driverID).toString(), - "status": 'reject After Applied', - "notes": cancelTripCotroller.text.toString() - }); - CRUD().post( - link: - "${AppLink.seferAlexandriaServer}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php", - payload: { - "order_id": rideId.toString(), - "driver_id": box.read(BoxName.driverID).toString(), - "status": 'reject After Applied', - "notes": cancelTripCotroller.text.toString() - }); sql.insertData({ 'order_id': rideId, 'created_at': DateTime.now().toString(), 'driver_id': box.read(BoxName.driverID).toString(), }, TableName.driverOrdersRefuse); - Get.put(OrderRequestController()).getRefusedOrderByCaptain(); + Get.find().getRefusedOrderByCaptain(); Get.offAll(HomeCaptain()); } } @@ -302,21 +289,13 @@ class MapDriverController extends GetxController { 'driverGoToPassengerTime': DateTime.now().toString(), 'status': 'Applied' }); - CRUD().post( - link: "${AppLink.seferGizaServer}/ride/rides/update.php", - payload: { - 'id': rideId, - 'driverGoToPassengerTime': DateTime.now().toString(), - 'status': 'Applied' - }); - CRUD().post( - link: "${AppLink.seferAlexandriaServer}/ride/rides/update.php", - payload: { - 'id': rideId, - 'driverGoToPassengerTime': DateTime.now().toString(), - 'status': 'Applied' - }); - + if (AppLink.endPoint != AppLink.seferCairoServer) { + CRUD().post(link: "${AppLink.endPoint}/ride/rides/update.php", payload: { + 'id': rideId, + 'driverGoToPassengerTime': DateTime.now().toString(), + 'status': 'Applied' + }); + } // Get.find().changeToAppliedRide('Applied'); FirebaseMessagesController().sendNotificationToAnyWithoutData( @@ -402,20 +381,13 @@ class MapDriverController extends GetxController { 'rideTimeStart': DateTime.now().toString(), 'status': 'Begin', }); - CRUD().post( - link: "${AppLink.seferAlexandriaServer}/rides/update.php", - payload: { - 'id': rideId, - 'rideTimeStart': DateTime.now().toString(), - 'status': 'Begin', - }); - CRUD() - .post(link: "${AppLink.seferGizaServer}/rides/update.php", payload: { - 'id': rideId, - 'rideTimeStart': DateTime.now().toString(), - 'status': 'Begin', - }); - + if (AppLink.endPoint != AppLink.seferCairoServer) { + CRUD().post(link: "${AppLink.endPoint}/rides/update.php", payload: { + 'id': rideId, + 'rideTimeStart': DateTime.now().toString(), + 'status': 'Begin', + }); + } FirebaseMessagesController().sendNotificationToAnyWithoutData( 'RideIsBegin', box.read(BoxName.name).toString(), @@ -533,20 +505,14 @@ class MapDriverController extends GetxController { 'rideTimeStart': DateTime.now().toString(), 'status': 'CancelAfterWait', }); - CRUD().post( - link: "${AppLink.seferAlexandriaServer}/rides/update.php", - payload: { - 'id': rideId, - 'rideTimeStart': DateTime.now().toString(), - 'status': 'CancelAfterWait', - }); - CRUD() - .post(link: "${AppLink.seferGizaServer}/rides/update.php", payload: { - 'id': rideId, - 'rideTimeStart': DateTime.now().toString(), - 'status': 'CancelAfterWait', - }); + if (AppLink.endPoint != AppLink.seferCairoServer) { + CRUD().post(link: "${AppLink.endPoint}/rides/update.php", payload: { + 'id': rideId, + 'rideTimeStart': DateTime.now().toString(), + 'status': 'CancelAfterWait', + }); + } var paymentTokenWait = await generateTokenDriver(costOfWaiting5Minute.toString()); var res = await CRUD().post(link: AppLink.addDrivePayment, payload: { @@ -676,23 +642,17 @@ class MapDriverController extends GetxController { 'status': 'Finished', 'price': totalCost, }); - CRUD().post( - link: "${AppLink.seferGizaServer}/rides/update.php", - payload: { - 'id': rideId, - 'rideTimeFinish': DateTime.now().toString(), - 'status': 'Finished', - 'price': totalCost, - }, - ); - CRUD().post( - link: "${AppLink.seferAlexandriaServer}/rides/update.php", + if (AppLink.endPoint != AppLink.seferCairoServer) { + CRUD().post( + link: "${AppLink.endPoint}/rides/update.php", payload: { 'id': rideId, 'rideTimeFinish': DateTime.now().toString(), 'status': 'Finished', 'price': totalCost, - }); + }, + ); + } if (walletChecked == 'true') { paymentToken = await generateTokenPassenger( ((-1) * double.parse(paymentAmount)).toString()); diff --git a/lib/controller/home/captin/order_request_controller.dart b/lib/controller/home/captin/order_request_controller.dart index c0aef3f..aebe104 100644 --- a/lib/controller/home/captin/order_request_controller.dart +++ b/lib/controller/home/captin/order_request_controller.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:SEFER/constant/links.dart'; @@ -5,7 +7,7 @@ import 'package:SEFER/constant/style.dart'; import 'package:SEFER/main.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; - +import 'dart:math' as math; import '../../../constant/box_name.dart'; import '../../../constant/table_names.dart'; import '../../functions/crud.dart'; @@ -24,15 +26,73 @@ class OrderRequestController extends GetxController { final locationController = Get.put(LocationController()); BitmapDescriptor startIcon = BitmapDescriptor.defaultMarker; BitmapDescriptor endIcon = BitmapDescriptor.defaultMarker; + final arguments = Get.arguments; + var myList; + late int hours; + late int minutes; @override void onInit() { - getRefusedOrderByCaptain(); + // getRefusedOrderByCaptain(); + initilizeOrderPage(); + addCustomStartIcon(); + addCustomEndIcon(); // calculateConsumptionFuel(); update(); super.onInit(); } + late LatLngBounds bounds; + late List pointsDirection; + late String body; + late double latPassengerLocation; + late double lngPassengerLocation; + late double lngPassengerDestination; + late double latPassengerDestination; + initilizeOrderPage() { + final myListString = arguments['myListString']; + // final myList = arguments['DriverList']; + if (arguments['DriverList'] == null || arguments['DriverList'].isEmpty) { + myList = jsonDecode(myListString); + } else { + myList = arguments['DriverList']; + } + + body = arguments['body']; + Duration durationToAdd = Duration(seconds: int.parse(myList[4])); + hours = durationToAdd.inHours; + minutes = (durationToAdd.inMinutes % 60).round(); + startTimerSpeed(myList[6].toString(), body.toString()); + var coords = myList[0].split(','); + var coordDestination = myList[1].split(','); + +// Parse to double + latPassengerLocation = double.parse(coords[0]); + lngPassengerLocation = double.parse(coords[1]); + latPassengerDestination = double.parse(coordDestination[0]); + lngPassengerDestination = double.parse(coordDestination[1]); + + pointsDirection = [ + LatLng(latPassengerLocation, lngPassengerLocation), + LatLng(latPassengerDestination, lngPassengerDestination) + ]; // Calculate the midpoint between the two points + // Calculate the minimum and maximum latitude and longitude values + double minLatitude = + math.min(pointsDirection[0].latitude, pointsDirection[1].latitude); + double maxLatitude = + math.max(pointsDirection[0].latitude, pointsDirection[1].latitude); + double minLongitude = + math.min(pointsDirection[0].longitude, pointsDirection[1].longitude); + double maxLongitude = + math.max(pointsDirection[0].longitude, pointsDirection[1].longitude); +// Create a bounding box using the calculated values + bounds = LatLngBounds( + southwest: LatLng(minLatitude, minLongitude), + northeast: LatLng(maxLatitude, maxLongitude), + ); + update(); + } + getRideDEtailsForBackgroundOrder() async { await CRUD().get(link: AppLink.getRidesDetails, payload: { 'id': box.read(BoxName.myList)[2].toString(), @@ -44,9 +104,10 @@ class OrderRequestController extends GetxController { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); - BitmapDescriptor.fromAssetImage(config, 'assets/images/A.png', - mipmaps: false) - .then((value) { + BitmapDescriptor.asset( + config, + 'assets/images/A.png', + ).then((value) { startIcon = value; update(); }); @@ -55,9 +116,10 @@ class OrderRequestController extends GetxController { void addCustomEndIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); - BitmapDescriptor.fromAssetImage(config, 'assets/images/b.png', - mipmaps: false) - .then((value) { + BitmapDescriptor.asset( + config, + 'assets/images/b.png', + ).then((value) { endIcon = value; update(); }); @@ -74,46 +136,6 @@ class OrderRequestController extends GetxController { 12; //todo in register car add mpg in box } - void getRefusedOrderByCaptain() async { - // Get today's date in YYYY-MM-DD format - String today = DateTime.now().toString().substring(0, 10); - - String driverId = box.read(BoxName.driverID).toString(); - - String customQuery = ''' - SELECT COUNT(*) AS count - FROM ${TableName.driverOrdersRefuse} - WHERE driver_id = '$driverId' - AND DATE(created_at) = '$today' - '''; - - try { - List> results = - await sql.getCustomQuery(customQuery); - countRefuse = results[0]['count'].toString(); - print(countRefuse); - update(); - if (int.parse(countRefuse) > 3) { - box.write(BoxName.statusDriverLocation, 'on'); - locationController.stopLocationUpdates(); - Get.defaultDialog( - // backgroundColor: CupertinoColors.destructiveRed, - barrierDismissible: false, - title: 'You Are Stopped For this Day !'.tr, - content: Text( - 'You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!' - .tr, - style: AppStyle.title, - ), - confirm: MyElevatedButton( - title: 'Ok , See you Tomorrow'.tr, - onPressed: () => Get.back())); - } else { - box.write(BoxName.statusDriverLocation, 'off'); - } - } catch (e) {} - } - bool _timerActive = false; Future startTimer(String driverID, String orderID) async { diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart index 9d6812a..745b844 100644 --- a/lib/controller/local/translations.dart +++ b/lib/controller/local/translations.dart @@ -476,9 +476,12 @@ Store your money with us and receive it in your bank as a monthly salary.''': "تُولي Sefer أهمية كبيرة لسلامتك. نحن نقدم ميزات مثل التحقق من هوية السائق ، وتتبع الرحلات داخل التطبيق ، وخيارات الاتصال في حالات الطوارئ.", 'Frequently Questions': 'الأسئلة الشائعة', "Contact Us": "اتصل بنا", + 'Choose a contact option': 'اختر خيار الاتصال', "You can change the vibration feedback for all buttons": "يمكنك تغيير اهتزاز الرج لجميع الأزرار", 'About Us': "نبذة عنا", + 'Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.': + 'ساعات العمل من 12:00 - 19:00.\nيمكنك إرسال رسالة عبر واتساب أو بريد إلكتروني.', "Most Secure Methods": "أساليب الأمان الأكثر فاعلية", "In-App VOIP Calls": "مكالمات VOIP داخل التطبيق", "Recorded Trips for Safety": "تسجيل الرحلات من أجل السلامة", @@ -1084,7 +1087,8 @@ Store your money with us and receive it in your bank as a monthly salary.''': "Please help! Contact me as soon as possible.": "من فضلك ساعدني! تواصل معي في أقرب وقت ممكن.", "Share Trip Details": "شارك تفاصيل الرحلة", - "Car Plate is": "لوحة السيارة", 'L.E': 'جنيه', + "Car Plate is": "لوحة السيارة", + 'L.E': 'ج.م', "the 3000 points equal 3000 L.E for you": "الـ 3000 نقطة تعادل 3000 جنيه مصري بالنسبة لك", "So go and gain your money": "انطلق واكسب مالك", diff --git a/lib/views/home/Captin/home_captain/home_captin.dart b/lib/views/home/Captin/home_captain/home_captin.dart index b6b2c20..3e42faa 100644 --- a/lib/views/home/Captin/home_captain/home_captin.dart +++ b/lib/views/home/Captin/home_captain/home_captin.dart @@ -36,7 +36,7 @@ class HomeCaptain extends StatelessWidget { @override Widget build(BuildContext context) { - Get.put(OrderRequestController()); + // Get.put(OrderRequestController()); // Get.put(HomeCaptainController()); Get.put(CaptainWalletController()); WidgetsBinding.instance.addPostFrameCallback((_) async { @@ -53,7 +53,7 @@ class HomeCaptain extends StatelessWidget { elevation: 1, title: Text('Home'.tr), actions: [ - GetBuilder( + GetBuilder( builder: (orderRequestController) => MyCircleContainer( child: Text( orderRequestController.countRefuse.toString(), diff --git a/lib/views/home/Captin/home_captain/widget/connect.dart b/lib/views/home/Captin/home_captain/widget/connect.dart index 53f3e76..a8a7b9e 100644 --- a/lib/views/home/Captin/home_captain/widget/connect.dart +++ b/lib/views/home/Captin/home_captain/widget/connect.dart @@ -16,8 +16,8 @@ class ConnectWidget extends StatelessWidget { @override Widget build(BuildContext context) { - final OrderRequestController orderRequestController = - Get.put(OrderRequestController()); + // final OrderRequestController orderRequestController = + // Get.put(OrderRequestController()); CaptainWalletController captainWalletController = Get.put(CaptainWalletController()); @@ -25,7 +25,7 @@ class ConnectWidget extends StatelessWidget { return Center( child: GetBuilder( builder: (homeCaptainController) => int.parse( - orderRequestController.countRefuse) > + homeCaptainController.countRefuse) > 3 || double.parse(captainWalletController.totalPoints) < -3000 ? CupertinoButton( diff --git a/lib/views/home/Captin/orderCaptin/order_speed_request.dart b/lib/views/home/Captin/orderCaptin/order_speed_request.dart index 027bf40..8215cb2 100644 --- a/lib/views/home/Captin/orderCaptin/order_speed_request.dart +++ b/lib/views/home/Captin/orderCaptin/order_speed_request.dart @@ -1,6 +1,5 @@ import 'dart:convert'; -import 'package:SEFER/controller/functions/tts.dart'; import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -10,7 +9,6 @@ import 'package:SEFER/main.dart'; import 'package:SEFER/views/home/Captin/driver_map_page.dart'; import 'package:SEFER/views/widgets/my_scafold.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'dart:math' as math; import '../../../../constant/colors.dart'; import '../../../../constant/links.dart'; import '../../../../constant/style.dart'; @@ -25,52 +23,9 @@ class OrderSpeedRequest extends StatelessWidget { Get.put(OrderRequestController()); @override Widget build(BuildContext context) { - final arguments = Get.arguments; - var myList; - final myListString = arguments['myListString']; - // final myList = arguments['DriverList']; - if (arguments['DriverList'] == null || arguments['DriverList'].isEmpty) { - myList = jsonDecode(myListString); - } else { - myList = arguments['DriverList']; - } - - final body = arguments['body']; - Duration durationToAdd = Duration(seconds: int.parse(myList[4])); - int hours = durationToAdd.inHours; - int minutes = (durationToAdd.inMinutes % 60).round(); - orderRequestController.startTimerSpeed( - myList[6].toString(), body.toString()); - var coords = myList[0].split(','); - var coordDestination = myList[1].split(','); - -// Parse to double - double latPassengerLocation = double.parse(coords[0]); - double lngPassengerLocation = double.parse(coords[1]); - double latPassengerDestination = double.parse(coordDestination[0]); - double lngPassengerDestination = double.parse(coordDestination[1]); - - List pointsDirection = [ - LatLng(latPassengerLocation, lngPassengerLocation), - LatLng(latPassengerDestination, lngPassengerDestination) - ]; // Calculate the midpoint between the two points - // Calculate the minimum and maximum latitude and longitude values - double minLatitude = - math.min(pointsDirection[0].latitude, pointsDirection[1].latitude); - double maxLatitude = - math.max(pointsDirection[0].latitude, pointsDirection[1].latitude); - double minLongitude = - math.min(pointsDirection[0].longitude, pointsDirection[1].longitude); - double maxLongitude = - math.max(pointsDirection[0].longitude, pointsDirection[1].longitude); -// Create a bounding box using the calculated values - LatLngBounds bounds = LatLngBounds( - southwest: LatLng(minLatitude, minLongitude), - northeast: LatLng(maxLatitude, maxLongitude), - ); // void addCustomStartIcon() async { // Create the marker with the resized image - orderRequestController.calculateConsumptionFuel(); + // orderRequestController.initilizeOrderPage(); // } // double mpg = 0; @@ -79,513 +34,577 @@ class OrderSpeedRequest extends StatelessWidget { // 12; //todo in register car add mpg in box // } - return MyScafolld( - title: 'Speed Order'.tr, - body: [ - ListView( - // crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // SizedBox(height: 200, child: Text(pointsList.toString())), - // Text(message.notification!.body.toString()), - SizedBox( - height: Get.height * .33, - child: GoogleMap( - initialCameraPosition: CameraPosition( - zoom: 12, - target: Get.find().myLocation), - cameraTargetBounds: CameraTargetBounds(bounds), - myLocationButtonEnabled: true, - trafficEnabled: true, - buildingsEnabled: true, - mapToolbarEnabled: true, - myLocationEnabled: true, - markers: { - Marker( - markerId: MarkerId('MyLocation'.tr), - position: - LatLng(latPassengerLocation, lngPassengerLocation), - draggable: true, - icon: orderRequestController.startIcon), - Marker( - markerId: MarkerId('Destination'.tr), - position: LatLng( - latPassengerDestination, lngPassengerDestination), - draggable: true, - icon: orderRequestController.endIcon), - }, - polylines: { - Polyline( - zIndex: 1, - consumeTapEvents: true, - geodesic: true, - endCap: Cap.buttCap, - startCap: Cap.buttCap, - visible: true, - polylineId: const PolylineId('routeOrder'), - points: pointsDirection, - color: AppColor.primaryColor, - width: 2, - ), - }, - ), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Card( - elevation: 3, - color: myList[20].toString() == 'haveSteps' - ? AppColor.greenColor - : AppColor.secondaryColor, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - TextButton.icon( - onPressed: () { - String mapUrl = - 'https://www.google.com/maps/dir/${myList[0]}/${myList[1]}/'; - showInBrowser(mapUrl); - }, - icon: const Icon(Icons.map), - label: myList[20].toString() == 'haveSteps' - ? Text( - 'Trip has Steps'.tr, - style: AppStyle.title, - ) - : Text('Payment Method'.tr, - style: AppStyle.title)), - Container( - decoration: AppStyle.boxDecoration.copyWith( - color: myList[13].toString() == 'true' - ? AppColor.deepPurpleAccent - : AppColor.greenColor, - ), - child: myList[13].toString() == - 'true' //Visa or Cash Method from notify to driver - ? Text( - 'Visa', - style: AppStyle.title, - ) - : Text('Cash', style: AppStyle.title), - ) - ], + return GetBuilder( + builder: (orderRequestController) { + return MyScafolld( + title: 'Speed Order'.tr, + body: [ + ListView( + // crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // SizedBox(height: 200, child: Text(pointsList.toString())), + // Text(message.notification!.body.toString()), + SizedBox( + height: Get.height * .33, + child: GoogleMap( + initialCameraPosition: CameraPosition( + zoom: 12, + target: Get.find().myLocation), + cameraTargetBounds: + CameraTargetBounds(orderRequestController.bounds), + myLocationButtonEnabled: true, + trafficEnabled: false, + buildingsEnabled: false, + mapToolbarEnabled: true, + myLocationEnabled: true, + markers: { + Marker( + markerId: MarkerId('MyLocation'.tr), + position: LatLng( + orderRequestController.latPassengerLocation, + orderRequestController.lngPassengerLocation), + draggable: true, + icon: orderRequestController.startIcon), + Marker( + markerId: MarkerId('Destination'.tr), + position: LatLng( + orderRequestController.latPassengerDestination, + orderRequestController.lngPassengerDestination), + draggable: true, + icon: orderRequestController.endIcon), + }, + polylines: { + Polyline( + zIndex: 1, + consumeTapEvents: true, + geodesic: true, + endCap: Cap.buttCap, + startCap: Cap.buttCap, + visible: true, + polylineId: const PolylineId('routeOrder'), + points: orderRequestController.pointsDirection, + color: AppColor.primaryColor, + width: 2, + ), + }, ), ), - ), - - Container( - decoration: AppStyle.boxDecoration1, - child: Padding( - padding: const EdgeInsets.all(8.0), + Padding( + padding: const EdgeInsets.all(8.0), + child: Card( + elevation: 3, + color: orderRequestController.myList[20].toString() == + 'haveSteps' + ? AppColor.greenColor + : AppColor.secondaryColor, child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ - Text( - double.parse(myList[2]).toStringAsFixed(2), - style: AppStyle.headTitle2, - ), - AnimatedContainer( - duration: const Duration(seconds: 5), - curve: Curves.easeInOut, - child: AnimatedSize( + TextButton.icon( + onPressed: () { + String mapUrl = + 'https://www.google.com/maps/dir/${orderRequestController.myList[0]}/${orderRequestController.myList[1]}/'; + showInBrowser(mapUrl); + }, + icon: const Icon(Icons.map), + label: + orderRequestController.myList[20].toString() == + 'haveSteps' + ? Text( + 'Trip has Steps'.tr, + style: AppStyle.title, + ) + : Text('Payment Method'.tr, + style: AppStyle.title)), + Container( + decoration: AppStyle.boxDecoration.copyWith( + color: + orderRequestController.myList[13].toString() == + 'true' + ? AppColor.deepPurpleAccent + : AppColor.greenColor, + ), + child: orderRequestController.myList[13].toString() == + 'true' //Visa or Cash Method from notify to driver + ? Text( + 'Visa', + style: AppStyle.title, + ) + : Text('Cash', style: AppStyle.title), + ) + ], + ), + ), + ), + + Container( + decoration: AppStyle.boxDecoration1, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text( + double.parse(orderRequestController.myList[2]) + .toStringAsFixed(2), + style: AppStyle.headTitle2, + ), + AnimatedContainer( duration: const Duration(seconds: 5), curve: Curves.easeInOut, - child: myList[31].toString() == 'Comfort' - ? Column( - mainAxisAlignment: - MainAxisAlignment.spaceAround, - children: [ - const Icon( - Icons.ac_unit, - color: AppColor.blueColor, - size: 50, - ), - Text( - 'Air condition Trip'.tr, - style: AppStyle.subtitle, - ), - ], - ) - : const SizedBox(), + child: AnimatedSize( + duration: const Duration(seconds: 5), + curve: Curves.easeInOut, + child: orderRequestController.myList[31] + .toString() == + 'Comfort' + ? Column( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + const Icon( + Icons.ac_unit, + color: AppColor.blueColor, + size: 50, + ), + Text( + 'Air condition Trip'.tr, + style: AppStyle.subtitle, + ), + ], + ) + : const SizedBox(), + ), ), + Text( + orderRequestController.myList[31].toString().tr, + style: AppStyle.title + .copyWith(color: AppColor.greenColor), + ), + ], + )), + ), + const SizedBox( + height: 5, + ), + Container( + height: Get.height * .22, + width: Get.width * .9, + decoration: AppStyle.boxDecoration1, + child: Padding( + padding: + const EdgeInsets.symmetric(horizontal: 5, vertical: 1), + child: ListView( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + const Icon( + Icons.arrow_circle_up, + color: AppColor.greenColor, + ), + Text( + orderRequestController.myList[12] + + ' ' + + ' (${orderRequestController.myList[11]}) ', + style: AppStyle.title, + ), + ], + ), + Text( + orderRequestController.myList[29], + style: AppStyle.title, + ), + ], ), - Text( - myList[31].toString().tr, - style: AppStyle.title - .copyWith(color: AppColor.greenColor), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + const Icon( + Icons.arrow_circle_down, + color: AppColor.redColor, + ), + Text( + orderRequestController.myList[5] + + ' ' + + ' (${orderRequestController.myList[4]}) ', + style: AppStyle.title, + ), + ], + ), + Text( + orderRequestController.myList[30], + style: AppStyle.title, + ), + ], ), ], - )), - ), - const SizedBox( - height: 5, - ), - Container( - height: Get.height * .2, - width: Get.width * .9, - decoration: AppStyle.boxDecoration1, - child: Padding( - padding: - const EdgeInsets.symmetric(horizontal: 5, vertical: 1), - child: ListView( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - // crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - const Icon( - Icons.arrow_circle_up, - color: AppColor.greenColor, - ), - Text( - myList[12] + ' ' + ' (${myList[11]}) ', - style: AppStyle.title, - ), - ], - ), - Text( - myList[29], - style: AppStyle.title, - ), - ], - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - const Icon( - Icons.arrow_circle_down, - color: AppColor.redColor, - ), - Text( - myList[5] + ' ' + ' (${myList[4]}) ', - style: AppStyle.title, - ), - ], - ), - Text( - myList[30], - style: AppStyle.title, - ), - ], - ), - ], + ), ), ), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: RichText( - text: TextSpan( - text: "Passenger name: " - .tr, // Changed text to be more generic - style: AppStyle.subtitle, - children: [ - TextSpan( - text: myList[8], - style: AppStyle - .title), // Assuming myList[8] holds passenger name - TextSpan(text: ' (', style: AppStyle.subtitle), - TextSpan( - text: myList[33].toString(), - style: AppStyle - .title), // Assuming 'rate' holds the passenger rate - TextSpan(text: ' ⭐)', style: AppStyle.subtitle), - ], + Padding( + padding: const EdgeInsets.all(8.0), + child: RichText( + text: TextSpan( + text: "Passenger name: " + .tr, // Changed text to be more generic + style: AppStyle.subtitle, + children: [ + TextSpan( + text: orderRequestController.myList[8], + style: AppStyle + .title), // Assuming orderRequestController.myList[8] holds passenger name + TextSpan(text: ' (', style: AppStyle.subtitle), + TextSpan( + text: orderRequestController.myList[33].toString(), + style: AppStyle + .title), // Assuming 'rate' holds the passenger rate + TextSpan(text: ' ⭐)', style: AppStyle.subtitle), + ], + ), ), ), - ), - // Padding( - // padding: const EdgeInsets.all(4), - // child: Container( - // color: AppColor.greenColor.withOpacity(.5), - // child: Row( - // mainAxisAlignment: MainAxisAlignment.spaceEvenly, - // children: [ - // RichText( - // text: TextSpan( - // text: 'Cost Of Trip IS '.tr, - // style: AppStyle.title, - // children: [ - // TextSpan( - // text: myList[26], style: AppStyle.headTitle2), - // ], - // ), - // ), - // RichText( - // text: TextSpan( - // text: 'Total net'.tr, - // style: AppStyle.title, - // children: [ - // TextSpan( - // text: (double.parse(myList[2]) - - // double.parse(myList[32])) - // .toStringAsFixed(2), - // style: AppStyle.headTitle2), - // ], - // ), - // ), - // ], - // ), - // ), - // ), + // Padding( + // padding: const EdgeInsets.all(4), + // child: Container( + // color: AppColor.greenColor.withOpacity(.5), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceEvenly, + // children: [ + // RichText( + // text: TextSpan( + // text: 'Cost Of Trip IS '.tr, + // style: AppStyle.title, + // children: [ + // TextSpan( + // text: orderRequestController.myList[26], style: AppStyle.headTitle2), + // ], + // ), + // ), + // RichText( + // text: TextSpan( + // text: 'Total net'.tr, + // style: AppStyle.title, + // children: [ + // TextSpan( + // text: (double.parse(orderRequestController.myList[2]) - + // double.parse(orderRequestController.myList[32])) + // .toStringAsFixed(2), + // style: AppStyle.headTitle2), + // ], + // ), + // ), + // ], + // ), + // ), + // ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - MyElevatedButton( - kolor: AppColor.greenColor, - title: 'Accept Order'.tr, - onPressed: () async { - Get.put(HomeCaptainController()).changeRideId(); - box.write(BoxName.statusDriverLocation, 'on'); - var res = await CRUD() - .post(link: AppLink.updateStausFromSpeed, payload: { - 'id': myList[16], - 'rideTimeStart': DateTime.now().toString(), - 'status': 'Apply', - 'driver_id': box.read(BoxName.driverID), - }); - CRUD().post( - link: - "${AppLink.seferAlexandriaServer}/rides/updateStausFromSpeed.php", - payload: { - 'id': myList[16], - 'rideTimeStart': DateTime.now().toString(), - 'status': 'Apply', - 'driver_id': box.read(BoxName.driverID), - }); - CRUD().post( - link: - "${AppLink.seferGizaServer}/rides/updateStausFromSpeed.php", - payload: { - 'id': myList[16], - 'rideTimeStart': DateTime.now().toString(), - 'status': 'Apply', - 'driver_id': box.read(BoxName.driverID), - }); - await CRUD().postFromDialogue( - link: AppLink.addDriverOrder, - payload: { - 'driver_id': myList[6].toString(), - // box.read(BoxName.driverID).toString(), - 'order_id': myList[16].toString(), - 'status': 'Apply' - }); - CRUD().postFromDialogue( - link: - '${AppLink.seferAlexandriaServer}/driver_order/add.php', - payload: { - 'driver_id': myList[6].toString(), - // box.read(BoxName.driverID).toString(), - 'order_id': myList[16].toString(), - 'status': 'Apply' - }); - - CRUD().postFromDialogue( - link: - '${AppLink.seferGizaServer}/driver_order/add.php', - payload: { - 'driver_id': myList[6].toString(), - // box.read(BoxName.driverID).toString(), - 'order_id': myList[16].toString(), - 'status': 'Apply' - }); - - // .then((value) { - // var json = jsonDecode(res); - if (res == "failure") { - Get.defaultDialog( - title: - "This ride is already taken by another driver." - .tr, - middleText: '', - titleStyle: AppStyle.title, - middleTextStyle: AppStyle.title, - confirm: MyElevatedButton( - title: 'Ok'.tr, - onPressed: () { - Get.back(); - Get.back(); - // Get.back(); - })); - } else if (jsonDecode(res)['status'] == "success") { + Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + MyElevatedButton( + kolor: AppColor.greenColor, + title: 'Accept Order'.tr, + onPressed: () async { + Get.put(HomeCaptainController()).changeRideId(); box.write(BoxName.statusDriverLocation, 'on'); - orderRequestController.changeApplied(); - List bodyToPassenger = [ - box.read(BoxName.driverID).toString(), - box.read(BoxName.nameDriver).toString(), - box.read(BoxName.tokenDriver).toString(), - ]; + var res = await CRUD().post( + link: AppLink.updateStausFromSpeed, + payload: { + 'id': orderRequestController.myList[16], + 'rideTimeStart': DateTime.now().toString(), + 'status': 'Apply', + 'driver_id': box.read(BoxName.driverID), + }); + CRUD().post( + link: + "${AppLink.seferAlexandriaServer}/rides/updateStausFromSpeed.php", + payload: { + 'id': orderRequestController.myList[16], + 'rideTimeStart': DateTime.now().toString(), + 'status': 'Apply', + 'driver_id': box.read(BoxName.driverID), + }); + CRUD().post( + link: + "${AppLink.seferGizaServer}/rides/updateStausFromSpeed.php", + payload: { + 'id': orderRequestController.myList[16], + 'rideTimeStart': DateTime.now().toString(), + 'status': 'Apply', + 'driver_id': box.read(BoxName.driverID), + }); await CRUD().postFromDialogue( link: AppLink.addDriverOrder, payload: { - 'driver_id': myList[6].toString(), + 'driver_id': + orderRequestController.myList[6].toString(), // box.read(BoxName.driverID).toString(), - 'order_id': body.toString(), + 'order_id': orderRequestController.myList[16] + .toString(), 'status': 'Apply' }); CRUD().postFromDialogue( link: '${AppLink.seferAlexandriaServer}/driver_order/add.php', payload: { - 'driver_id': myList[6].toString(), + 'driver_id': + orderRequestController.myList[6].toString(), // box.read(BoxName.driverID).toString(), - 'order_id': body.toString(), + 'order_id': orderRequestController.myList[16] + .toString(), 'status': 'Apply' }); + CRUD().postFromDialogue( link: '${AppLink.seferGizaServer}/driver_order/add.php', payload: { - 'driver_id': myList[6].toString(), + 'driver_id': + orderRequestController.myList[6].toString(), // box.read(BoxName.driverID).toString(), - 'order_id': body.toString(), + 'order_id': orderRequestController.myList[16] + .toString(), 'status': 'Apply' }); - FirebaseMessagesController() - .sendNotificationToPassengerToken( - 'Apply Ride', - 'your ride is applied'.tr, - // arguments['DriverList'][9].toString(), - arguments['DriverList'][9].toString(), - // box.read(BoxName.tokenDriver).toString(), - bodyToPassenger, - 'start.wav'); - Get.back(); - // 'Arguments passed to PassengerLocationMapPage:'); - // 'Payment Method: ${myList[13] == 'true' ? 'visa' : 'cash'}'); - box.write(BoxName.rideArguments, { - 'passengerLocation': myList[0].toString(), - 'passengerDestination': myList[1].toString(), - 'Duration': myList[4].toString(), - 'totalCost': myList[26].toString(), - 'Distance': myList[5].toString(), - 'name': myList[8].toString(), - 'phone': myList[10].toString(), - 'email': myList[28].toString(), - 'WalletChecked': myList[13].toString(), - 'tokenPassenger': myList[9].toString(), - 'direction': - 'https://www.google.com/maps/dir/${myList[0]}/${myList[1]}/', - 'DurationToPassenger': myList[15].toString(), - 'rideId': myList[16].toString(), - 'passengerId': myList[7].toString(), - 'driverId': myList[18].toString(), - 'durationOfRideValue': myList[19].toString(), - 'paymentAmount': myList[2].toString(), - 'paymentMethod': myList[13].toString() == 'true' - ? 'visa' - : 'cash', - 'isHaveSteps': myList[20].toString(), - 'step0': myList[21].toString(), - 'step1': myList[22].toString(), - 'step2': myList[23].toString(), - 'step3': myList[24].toString(), - 'step4': myList[25].toString(), - 'passengerWalletBurc': myList[26].toString(), - 'timeOfOrder': DateTime.now().toString(), - 'totalPassenger': myList[2].toString(), - 'carType': myList[31].toString(), - 'kazan': myList[32].toString(), - 'startNameLocation': myList[29].toString(), - 'endNameLocation': myList[30].toString(), - }); - Get.to(() => PassengerLocationMapPage(), - arguments: box.read(BoxName.rideArguments)); - } - // }); - // Get.back(); - }, - ), - GetBuilder( - builder: (timerController) { - final isNearEnd = timerController.remainingTimeSpeed <= - 5; // Define a threshold for "near end" + // .then((value) { + // var json = jsonDecode(res); + if (res == "failure") { + Get.defaultDialog( + title: + "This ride is already taken by another driver." + .tr, + middleText: '', + titleStyle: AppStyle.title, + middleTextStyle: AppStyle.title, + confirm: MyElevatedButton( + title: 'Ok'.tr, + onPressed: () { + Get.back(); + Get.back(); + // Get.back(); + })); + } else if (jsonDecode(res)['status'] == "success") { + box.write(BoxName.statusDriverLocation, 'on'); + orderRequestController.changeApplied(); + List bodyToPassenger = [ + box.read(BoxName.driverID).toString(), + box.read(BoxName.nameDriver).toString(), + box.read(BoxName.tokenDriver).toString(), + ]; + await CRUD().postFromDialogue( + link: AppLink.addDriverOrder, + payload: { + 'driver_id': orderRequestController.myList[6] + .toString(), + // box.read(BoxName.driverID).toString(), + 'order_id': + orderRequestController.body.toString(), + 'status': 'Apply' + }); + CRUD().postFromDialogue( + link: + '${AppLink.seferAlexandriaServer}/driver_order/add.php', + payload: { + 'driver_id': orderRequestController.myList[6] + .toString(), + // box.read(BoxName.driverID).toString(), + 'order_id': + orderRequestController.body.toString(), + 'status': 'Apply' + }); + CRUD().postFromDialogue( + link: + '${AppLink.seferGizaServer}/driver_order/add.php', + payload: { + 'driver_id': orderRequestController.myList[6] + .toString(), + // box.read(BoxName.driverID).toString(), + 'order_id': + orderRequestController.body.toString(), + 'status': 'Apply' + }); + FirebaseMessagesController() + .sendNotificationToPassengerToken( + 'Apply Ride', + 'your ride is applied'.tr, + // arguments['DriverList'][9].toString(), + orderRequestController + .arguments['DriverList'][9] + .toString(), + // box.read(BoxName.tokenDriver).toString(), + bodyToPassenger, + 'start.wav'); + Get.back(); - return Stack( - alignment: Alignment.center, - children: [ - CircularProgressIndicator( - value: timerController.progressSpeed, - // Set the color based on the "isNearEnd" condition - color: isNearEnd ? Colors.red : Colors.blue, - ), - Text( - '${timerController.remainingTimeSpeed}', - style: AppStyle.number, - ), - ], - ); - }, - ), - MyElevatedButton( - title: 'Refuse Order'.tr, - onPressed: () async { - // Get.defaultDialog( - // title: 'Reject Order'.tr, - // titleStyle: AppStyle.title, - // content: Column( - // children: [ - // IconButton( - // onPressed: () async { - // await Get.find() - // .speakText( - // 'You can decline a request without any cost' - // .tr); - // }, - // icon: const Icon(Icons.headphones), - // ), - // Text( - // 'You can decline a request without any cost' - // .tr, - // style: AppStyle.title, - // ) - // ], - // ), - // confirm: MyElevatedButton( - // title: 'Ok'.tr, - // onPressed: () { - // Get.back(); - // Get.back(); - // })); - orderRequestController.endTimer(); + // 'Arguments passed to PassengerLocationMapPage:'); + // 'Payment Method: ${orderRequestController.myList[13] == 'true' ? 'visa' : 'cash'}'); + box.write(BoxName.rideArguments, { + 'passengerLocation': + orderRequestController.myList[0].toString(), + 'passengerDestination': + orderRequestController.myList[1].toString(), + 'Duration': + orderRequestController.myList[4].toString(), + 'totalCost': + orderRequestController.myList[26].toString(), + 'Distance': + orderRequestController.myList[5].toString(), + 'name': + orderRequestController.myList[8].toString(), + 'phone': + orderRequestController.myList[10].toString(), + 'email': + orderRequestController.myList[28].toString(), + 'WalletChecked': + orderRequestController.myList[13].toString(), + 'tokenPassenger': + orderRequestController.myList[9].toString(), + 'direction': + 'https://www.google.com/maps/dir/${orderRequestController.myList[0]}/${orderRequestController.myList[1]}/', + 'DurationToPassenger': + orderRequestController.myList[15].toString(), + 'rideId': + orderRequestController.myList[16].toString(), + 'passengerId': + orderRequestController.myList[7].toString(), + 'driverId': + orderRequestController.myList[18].toString(), + 'durationOfRideValue': + orderRequestController.myList[19].toString(), + 'paymentAmount': + orderRequestController.myList[2].toString(), + 'paymentMethod': orderRequestController.myList[13] + .toString() == + 'true' + ? 'visa' + : 'cash', + 'isHaveSteps': + orderRequestController.myList[20].toString(), + 'step0': + orderRequestController.myList[21].toString(), + 'step1': + orderRequestController.myList[22].toString(), + 'step2': + orderRequestController.myList[23].toString(), + 'step3': + orderRequestController.myList[24].toString(), + 'step4': + orderRequestController.myList[25].toString(), + 'passengerWalletBurc': + orderRequestController.myList[26].toString(), + 'timeOfOrder': DateTime.now().toString(), + 'totalPassenger': + orderRequestController.myList[2].toString(), + 'carType': + orderRequestController.myList[31].toString(), + 'kazan': + orderRequestController.myList[32].toString(), + 'startNameLocation': + orderRequestController.myList[29].toString(), + 'endNameLocation': + orderRequestController.myList[30].toString(), + }); + Get.to(() => PassengerLocationMapPage(), + arguments: box.read(BoxName.rideArguments)); + } + // }); + // Get.back(); + }, + ), + GetBuilder( + builder: (timerController) { + final isNearEnd = + timerController.remainingTimeSpeed <= + 5; // Define a threshold for "near end" - orderRequestController.refuseOrder( - myList[16].toString(), - ); - orderRequestController.addRideToNotificationDriverString( - myList[16].toString(), - myList[29].toString(), - myList[30].toString(), - '${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day}', - '${DateTime.now().hour}:${DateTime.now().minute}', - myList[2].toString(), - myList[7].toString(), - 'wait', - myList[31].toString(), - myList[33].toString(), - myList[2].toString(), - myList[5].toString(), - myList[4].toString()); - }, - kolor: AppColor.redColor, - ), - ], - ), - ) - ], - ) - ], - isleading: true); + return Stack( + alignment: Alignment.center, + children: [ + CircularProgressIndicator( + value: timerController.progressSpeed, + // Set the color based on the "isNearEnd" condition + color: isNearEnd ? Colors.red : Colors.blue, + ), + Text( + '${timerController.remainingTimeSpeed}', + style: AppStyle.number, + ), + ], + ); + }, + ), + MyElevatedButton( + title: 'Refuse Order'.tr, + onPressed: () async { + // Get.defaultDialog( + // title: 'Reject Order'.tr, + // titleStyle: AppStyle.title, + // content: Column( + // children: [ + // IconButton( + // onPressed: () async { + // await Get.find() + // .speakText( + // 'You can decline a request without any cost' + // .tr); + // }, + // icon: const Icon(Icons.headphones), + // ), + // Text( + // 'You can decline a request without any cost' + // .tr, + // style: AppStyle.title, + // ) + // ], + // ), + // confirm: MyElevatedButton( + // title: 'Ok'.tr, + // onPressed: () { + // Get.back(); + // Get.back(); + // })); + orderRequestController.endTimer(); + + orderRequestController.refuseOrder( + orderRequestController.myList[16].toString(), + ); + orderRequestController.addRideToNotificationDriverString( + orderRequestController.myList[16].toString(), + orderRequestController.myList[29].toString(), + orderRequestController.myList[30].toString(), + '${DateTime.now().year}-${DateTime.now().month}-${DateTime.now().day}', + '${DateTime.now().hour}:${DateTime.now().minute}', + orderRequestController.myList[2].toString(), + orderRequestController.myList[7].toString(), + 'wait', + orderRequestController.myList[31].toString(), + orderRequestController.myList[33].toString(), + orderRequestController.myList[2].toString(), + orderRequestController.myList[5].toString(), + orderRequestController.myList[4].toString()); + }, + kolor: AppColor.redColor, + ), + ], + ), + ) + ], + ) + ], + isleading: true); + }); } } diff --git a/lib/views/home/my_wallet/card_wallet_widget.dart b/lib/views/home/my_wallet/card_wallet_widget.dart index d3773e0..41e4f43 100644 --- a/lib/views/home/my_wallet/card_wallet_widget.dart +++ b/lib/views/home/my_wallet/card_wallet_widget.dart @@ -172,9 +172,10 @@ class CardSeferWalletDriver extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '${AppInformation.appName} Wallet', - style: AppStyle.headTitle - .copyWith(color: AppColor.writeColor), + // '${AppInformation.appName} Wallet', + 'SEFER Wallet', + style: AppStyle.headTitle.copyWith( + color: AppColor.writeColor, fontSize: 26), ), const Icon(Icons.account_balance_wallet, color: AppColor.writeColor, size: 24), @@ -184,8 +185,8 @@ class CardSeferWalletDriver extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - '${Get.find().totalAmountVisa}\$' ?? - '0.0 \$', + '${Get.find().totalAmountVisa} ${'L.E'.tr}' ?? + '0.0 ${'L.E'.tr}', style: AppStyle.headTitle2.copyWith( color: AppColor.writeColor, fontSize: 28), ), diff --git a/lib/views/home/my_wallet/walet_captain.dart b/lib/views/home/my_wallet/walet_captain.dart index fa5b0b2..f9dd1b5 100644 --- a/lib/views/home/my_wallet/walet_captain.dart +++ b/lib/views/home/my_wallet/walet_captain.dart @@ -133,7 +133,7 @@ class WalletCaptain extends StatelessWidget { .tr); }, child: const Icon(Icons.headphones)), - '${'Total Amount:'.tr} ${captainWalletController.totalAmount}\$', + '${'Total Amount:'.tr} ${captainWalletController.totalAmount} ${'L.E'.tr}', 'This amount for all trip I get from Passengers' .tr, duration: const Duration(seconds: 6), @@ -163,7 +163,7 @@ class WalletCaptain extends StatelessWidget { }, child: const Icon(Icons.headphones), ), - '${'Total Amount:'.tr} ${captainWalletController.totalAmountVisa}\$', + '${'Total Amount:'.tr} ${captainWalletController.totalAmountVisa} ${'L.E'.tr}', 'This amount for all trip I get from Passengers and Collected For me in' .tr + ' ${AppInformation.appName} Wallet' @@ -296,7 +296,7 @@ class WalletCaptain extends StatelessWidget { child: Padding( padding: const EdgeInsets.all(8), child: Text( - '$amount\$', + '$amount ${'L.E'.tr}', style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), diff --git a/lib/views/notification/available_rides_page.dart b/lib/views/notification/available_rides_page.dart index 74338d3..91f3083 100644 --- a/lib/views/notification/available_rides_page.dart +++ b/lib/views/notification/available_rides_page.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:SEFER/constant/colors.dart'; import 'package:SEFER/constant/style.dart'; import 'package:SEFER/controller/notification/ride_available_controller.dart'; @@ -6,6 +8,15 @@ import 'package:SEFER/views/widgets/mycircular.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import '../../constant/box_name.dart'; +import '../../constant/links.dart'; +import '../../controller/firebase/firbase_messge.dart'; +import '../../controller/functions/crud.dart'; +import '../../controller/home/captin/home_captain_controller.dart'; +import '../../main.dart'; +import '../home/Captin/driver_map_page.dart'; +import '../widgets/mydialoug.dart'; + class AvailableRidesPage extends StatelessWidget { const AvailableRidesPage({super.key}); @@ -49,9 +60,6 @@ class RideAvailableCard extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // _buildLocationRow('🟢', rideInfo['startName']), - // const SizedBox(height: 8), - // _buildLocationRow('🔴', rideInfo['endName']), _buildLocationRow('↑', rideInfo['startName'], AppColor.greenColor), const SizedBox(height: 8), _buildLocationRow('↓', rideInfo['endName'], Colors.red), @@ -128,7 +136,127 @@ class RideAvailableCard extends StatelessWidget { } void _acceptRide() async { - // Your existing accept ride logic here - // ... + var res = await CRUD().post(link: AppLink.updateStausFromSpeed, payload: { + 'id': rideInfo['id'], + 'rideTimeStart': DateTime.now().toString(), + 'status': 'Apply', + 'driver_id': box.read(BoxName.driverID), + }); + if (AppLink.endPoint.toString() != AppLink.seferCairoServer) { + CRUD().post( + link: '${AppLink.endPoint}rides/updateStausFromSpeed.php', + payload: { + 'id': rideInfo['id'], + 'rideTimeStart': DateTime.now().toString(), + 'status': 'Apply', + 'driver_id': box.read(BoxName.driverID), + }); + } + + // .then((value) { + // var json = jsonDecode(res); + if (res == "failure") { + MyDialog().getDialog( + "This ride is already taken by another driver.".tr, '', () { + CRUD().post( + link: AppLink.deleteAvailableRide, payload: {'id': rideInfo['id']}); + if (AppLink.endPoint.toString() != AppLink.seferCairoServer) { + CRUD().post( + link: + '${AppLink.endPoint}/ride/notificationCaptain/deleteAvailableRide.php', + payload: {'id': rideInfo['id']}); + } + Get.back(); + }); + } else if (jsonDecode(res)['status'] == "success") { + List bodyToPassenger = [ + box.read(BoxName.driverID).toString(), + box.read(BoxName.nameDriver).toString(), + box.read(BoxName.tokenDriver).toString(), + ]; + box.write(BoxName.statusDriverLocation, 'on'); + await CRUD().postFromDialogue(link: AppLink.addDriverOrder, payload: { + 'driver_id': box.read(BoxName.driverID), + // box.read(BoxName.driverID).toString(), + 'order_id': rideInfo['id'], + 'status': 'Apply' + }); + if (AppLink.endPoint.toString() != AppLink.seferCairoServer) { + CRUD().postFromDialogue( + link: '${AppLink.endPoint}/driver_order/add.php', + payload: { + 'driver_id': box.read(BoxName.driverID), + // box.read(BoxName.driverID).toString(), + 'order_id': rideInfo['id'], + 'status': 'Apply' + }); + } + await CRUD().post(link: AppLink.updateRides, payload: { + 'id': rideInfo['id'], + 'DriverIsGoingToPassenger': DateTime.now().toString(), + 'status': 'Applied' + }); + if (AppLink.endPoint.toString() != AppLink.seferCairoServer) { + CRUD().post(link: '${AppLink.endPoint}/rides/update.php', payload: { + 'id': rideInfo['id'], + 'DriverIsGoingToPassenger': DateTime.now().toString(), + 'status': 'Applied' + }); + } + + await CRUD().post( + link: AppLink.updateWaitingRide, + payload: {'id': rideInfo['id'], 'status': 'Applied'}); + if (AppLink.endPoint.toString() != AppLink.seferCairoServer) { + CRUD().post( + link: + "${AppLink.endPoint}/ride/notificationCaptain/updateWaitingTrip.php", + payload: {'id': rideInfo['id'], 'status': 'Applied'}); + } + FirebaseMessagesController().sendNotificationToPassengerToken( + 'Apply Ride', + 'your ride is applied'.tr, + // arguments['DriverList'][9].toString(), + rideInfo['passengerToken'].toString(), + // box.read(BoxName.tokenDriver).toString(), + bodyToPassenger, + 'start.wav'); + Get.back(); + Get.to(() => PassengerLocationMapPage(), arguments: { + 'passengerLocation': rideInfo['start_location'].toString(), + 'passengerDestination': rideInfo['end_location'].toString(), + 'Duration': rideInfo['duration'].toString(), + 'totalCost': rideInfo['price'].toString(), + 'Distance': rideInfo['distance'].toString(), + 'name': rideInfo['first_name'].toString(), + 'phone': rideInfo['phone'].toString(), + 'email': rideInfo['email'].toString(), + 'WalletChecked': rideInfo['payment_method'].toString(), + 'tokenPassenger': rideInfo['passengerToken'].toString(), + 'direction': + 'https://www.google.com/maps/dir/${rideInfo['start_location']}/${rideInfo['end_location']}/', + 'DurationToPassenger': rideInfo['duration'].toString(), + 'rideId': rideInfo['id'].toString(), + 'passengerId': rideInfo['passenger_id'].toString(), + 'driverId': box.read(BoxName.driverID).toString(), + 'durationOfRideValue': rideInfo['duration'].toString(), + 'paymentAmount': rideInfo['price'].toString(), + 'paymentMethod': 'cash'.toString() == //todo fix payment method + 'true' + ? 'visa' + : 'cash', + 'isHaveSteps': 'startEnd'.toString(), + 'step0': ''.toString(), + 'step1': ''.toString(), + 'step2': ''.toString(), + 'step3': ''.toString(), + 'step4': ''.toString(), + 'passengerWalletBurc': rideInfo['bruc'].toString(), + 'timeOfOrder': DateTime.now().toString(), + 'totalPassenger': rideInfo['price'].toString(), + 'carType': rideInfo['carType'].toString(), + 'kazan': Get.find().kazan.toString(), + }); + } } }