diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart index 3ea6676..77caf18 100644 --- a/lib/controller/firebase/firbase_messge.dart +++ b/lib/controller/firebase/firbase_messge.dart @@ -133,8 +133,7 @@ class FirebaseMessagesController extends GetxController { NotificationController().showNotification('Order', '', 'order'); } var myListString = message.data['DriverList']; - // print(myListString); - // print('9999999999999myListString999999999999999'); + var myList = jsonDecode(myListString) as List; driverToken = myList[14].toString(); update(); @@ -146,10 +145,10 @@ class FirebaseMessagesController extends GetxController { }); } else if (message.notification!.title! == 'Apply Ride') { var passengerList = message.data['passengerList']; - // print(passengerList); - // print('9999999999999my Apply Ride 999999999999999'); + var myList = jsonDecode(passengerList) as List; driverID = myList[2].toString(); + NotificationController().showNotification( 'Apply Order', 'Driver Applied the Ride for You'.tr, 'order'); // driverAppliedTripSnakBar(); @@ -162,11 +161,14 @@ class FirebaseMessagesController extends GetxController { 'Cancel Trip'.tr, 'Passenger Cancel Trip'.tr, 'order'); cancelTripDialog(); } else if (message.notification!.title! == 'DriverIsGoingToPassenger') { + Get.find().isDriverInPassengerWay = true; + Get.find().update(); NotificationController().showNotification('Driver is Going To You'.tr, 'Please stay on the picked point.'.tr, 'order'); // Get.snackbar('Driver is Going To Passenger', '', // backgroundColor: AppColor.greenColor); } else if (message.notification!.title! == 'RideIsBegin') { + Get.find().getBeginRideFromDriver(); // Get.snackbar('RideIsBegin', '', backgroundColor: AppColor.greenColor); NotificationController() .showNotification('Trip is Begin'.tr, ''.tr, 'order'); @@ -191,16 +193,11 @@ class FirebaseMessagesController extends GetxController { 'you will pay to Driver'.tr + ' ${Get.find().totalPassenger} \$'.tr, 'order'); + Get.find().tripFinishedFromDriver(); if (Get.find().isCashChecked == false && Get.find().isWalletChecked == true) { driverFinishTripDialoge(driverList); - } else if (double.parse(box.read(BoxName.passengerWalletTotal)) < 0) { - CRUD().post(link: AppLink.addPassengersWallet, payload: { - 'passenger_id': box.read(BoxName.passengerID).toString(), - 'balance': - ((-1) * double.parse(box.read(BoxName.passengerWalletTotal))) - .toString() - }); + } else { Get.to(() => RateDriverFromPassenger(), arguments: { 'driverId': driverList[0].toString(), 'rideId': driverList[1].toString(), @@ -268,6 +265,9 @@ class FirebaseMessagesController extends GetxController { 'Hi ,I will go now'.tr, 'I will go now'.tr, Get.find().driverToken, []); + Get.find() + .startTimerDriverWaitPassenger5Minute(); + Get.back(); })); } diff --git a/lib/controller/home/captin/map_driver_controller.dart b/lib/controller/home/captin/map_driver_controller.dart index db7a545..f6942cb 100644 --- a/lib/controller/home/captin/map_driver_controller.dart +++ b/lib/controller/home/captin/map_driver_controller.dart @@ -1,6 +1,5 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:math'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; @@ -8,7 +7,6 @@ import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_polyline_algorithm/google_polyline_algorithm.dart'; import 'package:SEFER/constant/style.dart'; -import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart'; import '../../../constant/api_key.dart'; @@ -45,6 +43,7 @@ class MapDriverController extends GetxController { late String step2; late String step3; late String step4; + late String passengerWalletBurc; late String duration; late String totalCost; late String distance; @@ -213,6 +212,10 @@ class MapDriverController extends GetxController { await Future.delayed(const Duration(seconds: 1)); progressInPassengerLocationFromDriver = i / (timeWaitingPassenger * 60); remainingTimeInPassengerLocatioWait = (timeWaitingPassenger * 60) - i; + if (isRideBegin == true) { + remainingTimeInPassengerLocatioWait = 0; + update(); + } if (remainingTimeInPassengerLocatioWait == 0) { isdriverWaitTimeEnd = true; print(isdriverWaitTimeEnd); @@ -289,6 +292,8 @@ class MapDriverController extends GetxController { isPassengerInfoWindow = false; isRideStarted = true; isRideFinished = false; + remainingTimeInPassengerLocatioWait = 0; + timeWaitingPassenger = 0; box.write(BoxName.statusDriverLocation, 'on'); update(); @@ -305,6 +310,8 @@ class MapDriverController extends GetxController { 'rideTimeStart': DateTime.now().toString(), 'status': 'Begin' }); + FirebaseMessagesController().sendNotificationToAnyWithoutData( + 'RideIsBegin', box.read(BoxName.name).toString(), tokenPassenger); rideIsBeginPassengerTimer(); double pointsSubstraction = 0; pointsSubstraction = double.parse(paymentAmount) * -100; @@ -320,9 +327,6 @@ class MapDriverController extends GetxController { print('...................'); print(d); print('...................'); - - // FirebaseMessagesController().sendNotificationToAnyWithoutData( - // 'RideIsBegin', box.read(BoxName.name).toString(), tokenPassenger); } calculateDistanseBetweenDriverAndPassengerLocation() { @@ -375,8 +379,16 @@ class MapDriverController extends GetxController { } void finishRideFromDriver() async { + double distanceToDestination = Geolocator.distanceBetween( + latLngPassengerDestination.latitude, + latLngPassengerDestination.longitude, + Get.find().myLocation.latitude, + Get.find().myLocation.longitude, + ); + // if (distanceToDestination < 50) { isRideFinished = true; isRideStarted = false; + box.write(BoxName.statusDriverLocation, 'off'); // changeRideToBeginToPassenger(); await CRUD().post(link: AppLink.updateRides, payload: { @@ -384,14 +396,21 @@ class MapDriverController extends GetxController { 'rideTimeFinish': DateTime.now().toString(), 'status': 'Finished' }); + print('walletChecked is $walletChecked'); if (walletChecked == 'true') { await CRUD().post(link: AppLink.addPassengersWallet, payload: { 'passenger_id': passengerId, - 'ba lance': ((-1) * double.parse(totalCost)).toString() + 'balance': ((-1) * double.parse(paymentAmount)).toString() + }); + } + print('passengerWalletBurc bef ${double.parse(passengerWalletBurc)}'); + if (double.parse(passengerWalletBurc) < 0) { + print('passengerWalletBurc aft ${double.parse(passengerWalletBurc)}'); + await CRUD().post(link: AppLink.addPassengersWallet, payload: { + 'passenger_id': passengerId, + 'balance': ((-1) * double.parse(passengerWalletBurc)).toString() }); } - - // Get.back(); Future.delayed(const Duration(milliseconds: 300)); FirebaseMessagesController().sendNotificationToPassengerToken( 'Driver Finish Trip', @@ -408,6 +427,19 @@ class MapDriverController extends GetxController { 'passengerId': passengerId, 'driverId': driverId }); + // } else { + // Get.defaultDialog( + // title: 'You don\'t arrive destenation yet .'.tr, + // middleText: '', + // confirm: MyElevatedButton( + // title: 'Ok'.tr, + // onPressed: () { + // Get.back(); + // })); + // } +// add wallet from passenger from driver + + // Get.back(); } void cancelCheckRidefromPassenger() async { @@ -447,23 +479,22 @@ class MapDriverController extends GetxController { // print('mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm'); // print(durationOfRideValue); int durationOfRide = int.parse(durationOfRideValue); - + update(); for (int i = 0; i <= durationOfRide; i++) { await Future.delayed(const Duration(seconds: 1)); progressTimerRideBegin = i / durationOfRide; remainingTimeTimerRideBegin = durationOfRide - i; remainingTimeTimerRideBegin < 60 ? driverEndPage = 160 : 100; - + if (remainingTimeTimerRideBegin < 120) { + // to make driver available on last 2 minute in his trip + box.write(BoxName.statusDriverLocation, 'off'); + } int minutes = (remainingTimeTimerRideBegin / 60).floor(); int seconds = remainingTimeTimerRideBegin % 60; stringRemainingTimeRideBegin = '$minutes:${seconds.toString().padLeft(2, '0')}'; update(); } - if (remainingTimeTimerRideBegin < 120) { - // to make driver available on last 2 minute in his trip - box.write(BoxName.statusDriverLocation, 'off'); - } } void updateMarker() { @@ -701,6 +732,7 @@ class MapDriverController extends GetxController { step2 = Get.arguments['step2']; step3 = Get.arguments['step3']; step4 = Get.arguments['step4']; + passengerWalletBurc = Get.arguments['passengerWalletBurc']; var coords = passengerLocation.split(','); var coordDestination = passengerDestination.split(','); diff --git a/lib/controller/home/captin/order_request_controller.dart b/lib/controller/home/captin/order_request_controller.dart index 18a8348..f74a28b 100644 --- a/lib/controller/home/captin/order_request_controller.dart +++ b/lib/controller/home/captin/order_request_controller.dart @@ -3,7 +3,6 @@ import 'package:get/get.dart'; import 'package:SEFER/constant/links.dart'; import 'package:SEFER/constant/style.dart'; import 'package:SEFER/main.dart'; -import 'package:SEFER/views/home/Captin/home_captain/home_captin.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart'; import '../../../constant/box_name.dart'; diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart index d7ce993..b0dd039 100644 --- a/lib/controller/home/map_passenger_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -94,6 +94,10 @@ class MapPassengerController extends GetxController { double heightPointsPageForRider = 0; double mainBottomMenuMapHeight = Get.height * .2; double wayPointSheetHeight = 0; + String stringRemainingTimeToPassenger = ''; + String stringRemainingTimeDriverWaitPassenger5Minute = ''; + bool isDriverInPassengerWay = false; + bool isDriverArrivePassenger = false; bool startLocationFromMap = false; bool workLocationFromMap = false; bool homeLocationFromMap = false; @@ -135,10 +139,12 @@ class MapPassengerController extends GetxController { int selectedPassengerCount = 1; double progress = 0; double progressTimerToPassengerFromDriverAfterApplied = 0; + double progressTimerDriverWaitPassenger5Minute = 0; int durationTimer = 25; int durationToRide = 0; int remainingTime = 25; int remainingTimeToPassengerFromDriverAfterApplied = 60; + int remainingTimeDriverWaitPassenger5Minute = 60; int timeToPassengerFromDriverAfterApplied = 0; Timer? timerToPassengerFromDriverAfterApplied; bool rideTimerBegin = false; @@ -448,8 +454,6 @@ class MapPassengerController extends GetxController { update(); } - String stringRemainingTimeToPassenger = ''; - void startTimerFromDriverToPassengerAfterApplied() async { for (int i = 0; i <= timeToPassengerFromDriverAfterApplied; i++) { await Future.delayed(const Duration(seconds: 1)); @@ -470,14 +474,24 @@ class MapPassengerController extends GetxController { stringRemainingTimeToPassenger = '$minutes:${seconds.toString().padLeft(2, '0')}'; - // var cameraUpdate = CameraUpdate.newLatLngZoom( - // driverLocationToPassenger, - // 17, - // ); - // mapController!.animateCamera(cameraUpdate); + update(); + } + } - // print(driverCarsLocationToPassengerAfterApplied); - // print(driverCarsLocationToPassengerAfterApplied[0]); + void startTimerDriverWaitPassenger5Minute() async { + isDriverArrivePassenger = true; + isDriverInPassengerWay = false; + timeToPassengerFromDriverAfterApplied = 0; + update(); + for (int i = 0; i <= 300; i++) { + await Future.delayed(const Duration(seconds: 1)); + progressTimerDriverWaitPassenger5Minute = i / 300; + remainingTimeDriverWaitPassenger5Minute = 300 - i; + + int minutes = (remainingTimeDriverWaitPassenger5Minute / 60).floor(); + int seconds = remainingTimeDriverWaitPassenger5Minute % 60; + stringRemainingTimeDriverWaitPassenger5Minute = + '$minutes:${seconds.toString().padLeft(2, '0')}'; update(); } @@ -535,6 +549,13 @@ class MapPassengerController extends GetxController { // } } + void tripFinishedFromDriver() async { + isRideFinished = true; + rideTimerBegin = false; + remainingTimeTimerRideBegin = 0; + update(); + } + void getBeginRideFromDriver() async { try { var res = await CRUD() @@ -548,7 +569,10 @@ class MapPassengerController extends GetxController { timeToPassengerFromDriverAfterApplied = 0; remainingTime = 0; remainingTimeToPassengerFromDriverAfterApplied = 0; + remainingTimeDriverWaitPassenger5Minute = 0; rideTimerBegin = true; + isDriverInPassengerWay = false; + isDriverArrivePassenger = false; update(); // isCancelRidePageShown = true; rideIsBeginPassengerTimer(); @@ -733,7 +757,11 @@ class MapPassengerController extends GetxController { placesCoordinate[2], placesCoordinate[3], placesCoordinate[4], - costDistance.toStringAsFixed(2) + costDistance.toStringAsFixed(2), + double.parse(box.read(BoxName.passengerWalletTotal)) < 0 + ? double.parse(box.read(BoxName.passengerWalletTotal)) + .toStringAsFixed(2) + : '0', ]; FirebaseMessagesController().sendNotificationToDriverMAP( 'Order', diff --git a/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart b/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart index c390262..e2f2280 100644 --- a/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart +++ b/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart @@ -241,7 +241,8 @@ class PassengerInfoWindow extends StatelessWidget { ), controller.remainingTimeInPassengerLocatioWait < 300 && - controller.remainingTimeInPassengerLocatioWait != + controller + .remainingTimeInPassengerLocatioWait != 0 ? Stack( children: [ @@ -272,8 +273,9 @@ class PassengerInfoWindow extends StatelessWidget { ) : controller.isdriverWaitTimeEnd ? MyElevatedButton( - title: - 'You Can Cancel Trip And get Cost of Trip From ${AppInformation.appName}' + title: 'You Can Cancel Trip And get Cost of Trip From' + .tr + + ' ${AppInformation.appName}' .tr, kolor: AppColor .deepPurpleAccent, diff --git a/lib/views/home/Captin/orderCaptin/order_request_page.dart b/lib/views/home/Captin/orderCaptin/order_request_page.dart index ac5dd2e..e7d4b15 100644 --- a/lib/views/home/Captin/orderCaptin/order_request_page.dart +++ b/lib/views/home/Captin/orderCaptin/order_request_page.dart @@ -223,7 +223,7 @@ class OrderRequestPage extends StatelessWidget { 'passengerLocation': myList[0].toString(), 'passengerDestination': myList[1].toString(), 'Duration': myList[4].toString(), - 'totalCost': myList[2].toString(), + 'totalCost': myList[26].toString(), 'Distance': myList[5].toString(), 'name': myList[8].toString(), 'phone': myList[10].toString(), @@ -236,7 +236,7 @@ class OrderRequestPage extends StatelessWidget { 'passengerId': myList[7].toString(), 'driverId': myList[18].toString(), 'durationOfRideValue': myList[19].toString(), - 'paymentAmount': myList[3].toString(), + 'paymentAmount': myList[2].toString(), 'paymentMethod': myList[13].toString() == 'true' ? 'visa' : 'cash', 'isHaveSteps': myList[20].toString(), @@ -245,6 +245,7 @@ class OrderRequestPage extends StatelessWidget { 'step2': myList[23].toString(), 'step3': myList[24].toString(), 'step4': myList[25].toString(), + 'passengerWalletBurc': myList[26].toString(), }); }, ), diff --git a/lib/views/home/map_widget.dart/buttom_sheet_map_show.dart b/lib/views/home/map_widget.dart/buttom_sheet_map_show.dart index 763c10a..aa58c95 100644 --- a/lib/views/home/map_widget.dart/buttom_sheet_map_show.dart +++ b/lib/views/home/map_widget.dart/buttom_sheet_map_show.dart @@ -1,7 +1,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:intl/intl.dart'; import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/info.dart'; import 'package:SEFER/controller/payment/payment_controller.dart'; diff --git a/lib/views/home/map_widget.dart/ride_begin_passenger.dart b/lib/views/home/map_widget.dart/ride_begin_passenger.dart index ed47abf..2e8ecb4 100644 --- a/lib/views/home/map_widget.dart/ride_begin_passenger.dart +++ b/lib/views/home/map_widget.dart/ride_begin_passenger.dart @@ -4,7 +4,6 @@ import 'package:get/get.dart'; import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/controller/profile/profile_controller.dart'; import 'package:SEFER/main.dart'; -import 'package:SEFER/views/widgets/elevated_btn.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; @@ -26,7 +25,7 @@ class RideBeginPassenger extends StatelessWidget { bottom: 4, child: Container( decoration: AppStyle.boxDecoration, - height: 200, + height: controller.rideTimerBegin ? 200 : 0, // width: 100, child: Padding( padding: const EdgeInsets.all(8.0), diff --git a/lib/views/home/map_widget.dart/timer_to_passenger_from_driver.dart b/lib/views/home/map_widget.dart/timer_to_passenger_from_driver.dart index 1393467..cf45d9c 100644 --- a/lib/views/home/map_widget.dart/timer_to_passenger_from_driver.dart +++ b/lib/views/home/map_widget.dart/timer_to_passenger_from_driver.dart @@ -1,15 +1,11 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:SEFER/constant/links.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart'; -import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; -import '../../../controller/firebase/firbase_messge.dart'; -import '../../../controller/functions/crud.dart'; import '../../../controller/home/map_passenger_controller.dart'; -import '../../../main.dart'; +import 'ride_begin_passenger.dart'; class TimerToPassengerFromDriver extends StatelessWidget { const TimerToPassengerFromDriver({ @@ -20,14 +16,20 @@ class TimerToPassengerFromDriver extends StatelessWidget { Widget build(BuildContext context) { return GetBuilder(builder: (controller) { if (controller.remainingTime == 0 && - controller.timeToPassengerFromDriverAfterApplied > 0) { + (controller.isDriverInPassengerWay == true || + controller.timeToPassengerFromDriverAfterApplied > 0)) { + // ) { return Positioned( left: 10, right: 10, bottom: 5, child: Container( decoration: AppStyle.boxDecoration, - height: 200, + height: controller.remainingTime == 0 && + (controller.isDriverInPassengerWay == true || + controller.timeToPassengerFromDriverAfterApplied > 0) + ? 200 + : 0, // width: 100, child: Padding( padding: const EdgeInsets.all(8.0), @@ -66,12 +68,6 @@ class TimerToPassengerFromDriver extends StatelessWidget { ? MyElevatedButton( title: 'You can cancel trip'.tr, onPressed: () async { - // await CRUD() - // .post(link: AppLink.updateRides, payload: { - // 'id': controller.rideId, - // 'rideTimeStart': DateTime.now().toString(), - // 'status': 'Applied' - // }); await controller .calculateDistanceBetweenPassengerAndDriverBeforecancelRide(); }) @@ -81,8 +77,59 @@ class TimerToPassengerFromDriver extends StatelessWidget { ), ), ); + } else if (controller.remainingTime == 0 && + controller.isDriverArrivePassenger == true) { + return Positioned( + left: 10, + right: 10, + bottom: 5, + child: Container( + decoration: AppStyle.boxDecoration, + height: controller.remainingTime == 0 && + controller.isDriverArrivePassenger == true + ? 150 + : 0, + // width: 100, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + Text( + 'The driver waitting you in picked location .'.tr, + style: AppStyle.title, + textAlign: TextAlign.center, + ), + Stack( + children: [ + LinearProgressIndicator( + backgroundColor: AppColor.accentColor, + color: + controller.remainingTimeDriverWaitPassenger5Minute < + 60 + ? AppColor.redColor + : AppColor.greenColor, + minHeight: 50, + borderRadius: BorderRadius.circular(15), + value: controller + .progressTimerDriverWaitPassenger5Minute + .toDouble(), + ), + Center( + child: Text( + controller + .stringRemainingTimeDriverWaitPassenger5Minute, + style: AppStyle.title, + ), + ) + ], + ), + ], + ), + ), + ), + ); } else { - return const SizedBox(); + return const RideBeginPassenger(); } }); }