From b61ce6ab2e7af6e66004dcd2fd6634594c9b3256 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Tue, 10 Oct 2023 02:54:11 +0300 Subject: [PATCH] 10/10/1 --- lib/constant/links.dart | 1 + lib/controller/firebase/firbase_messge.dart | 39 +++-- ...rction.dart => map_driver_controller.dart} | 49 +++++- ...ler.dart => map_passenger_controller.dart} | 162 +++++++++++++----- .../payment/payment_controller.dart | 6 +- lib/main.dart | 20 ++- lib/views/home/map_page.dart | 16 +- .../buttom_sheet_map_show.dart | 8 +- .../map_widget.dart/cancel_raide_page.dart | 8 +- .../cash_confirm_bottom_page.dart | 4 +- .../driver_card_from_passenger.dart | 6 +- .../driver_time_arrive_passenger.dart | 4 +- .../map_widget.dart/form_search_places.dart | 6 +- .../map_widget.dart/left_main_menu_icons.dart | 6 +- .../map_widget.dart/main_bottom_Menu_map.dart | 10 +- .../home/map_widget.dart/map_menu_widget.dart | 4 +- .../home/map_widget.dart/menu_map_page.dart | 4 +- .../passenger_info_window.dart | 79 ++++----- .../map_widget.dart/payment_method.page.dart | 4 +- .../picker_animation_container.dart | 6 +- .../map_widget.dart/ride_begin_passenger.dart | 96 +++++++++++ ...timer_for_cancell_trip_from_passenger.dart | 6 +- .../timer_to_passenger_from_driver.dart | 8 +- ...ion_dirction.dart => driver_map_page.dart} | 51 +++++- lib/views/orderCaptin/order_request_page.dart | 2 +- 25 files changed, 437 insertions(+), 168 deletions(-) rename lib/controller/home/captin/{map_dirction.dart => map_driver_controller.dart} (85%) rename lib/controller/home/{map_page_controller.dart => map_passenger_controller.dart} (89%) create mode 100644 lib/views/home/map_widget.dart/ride_begin_passenger.dart rename lib/views/orderCaptin/{passenger_location_dirction.dart => driver_map_page.dart} (55%) diff --git a/lib/constant/links.dart b/lib/constant/links.dart index cd302f9..9dc1ca7 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -35,6 +35,7 @@ class AppLink { static const String addRides = "$ride/rides/add.php"; static const String getRides = "$ride/rides/get.php"; static const String getRideStatus = "$ride/rides/getRideStatus.php"; + static const String getRideStatusBegin = "$ride/rides/getRideStatusBegin.php"; static const String updateRides = "$ride/rides/update.php"; static const String deleteRides = "$ride/rides/delete.php"; diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart index ee15fc6..4707354 100644 --- a/lib/controller/firebase/firbase_messge.dart +++ b/lib/controller/firebase/firbase_messge.dart @@ -8,8 +8,8 @@ import 'package:ride/constant/colors.dart'; import 'package:ride/constant/style.dart'; import 'package:ride/controller/functions/crud.dart'; import 'package:ride/controller/functions/launch.dart'; -import 'package:ride/controller/home/captin/map_dirction.dart'; -import 'package:ride/controller/home/map_page_controller.dart'; +import 'package:ride/controller/home/captin/map_driver_controller.dart'; +import 'package:ride/controller/home/map_passenger_controller.dart'; import 'package:ride/views/home/profile/promos_passenger_page.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; @@ -27,13 +27,6 @@ class FirebaseMessagesController extends GetxController { late String driverID; late String driverToken; NotificationSettings? notificationSettings; - @override - void onInit() async { - super.onInit(); - // getNotificationSettings(); - // getToken(); - // await getTokens(); - } Future getNotificationSettings() async { // Get the current notification settings @@ -187,15 +180,22 @@ class FirebaseMessagesController extends GetxController { ); } else if (message.notification!.title!.contains('Promo')) { Get.to(const PromosPassengerPage()); + } else if (message.notification!.title! + .contains('DriverIsGoingToPassenger')) { + Get.snackbar('Driver is Going To Passenger', '', + backgroundColor: AppColor.greenColor); } else if (message.notification!.title!.contains('RideIsBegin')) { - // MapDirection mapDirection = Get.find(); - // mapDirection.clearPolyline(); - print('jjjjjjjjjjjjjjjjjjjjjjjjjjj'); - Get.defaultDialog( - title: 'The Ride is Begin'.tr, - backgroundColor: AppColor.greenColor, - ); - MapDirection().clearPolyline(); + // MapPassengerController mapController = Get.put(MapPassengerController()); + Get.snackbar('RideIsBegin', '', backgroundColor: AppColor.greenColor); + // mapController.driverArrivePassenger(); + update(); + } else if (message.notification!.title!.contains('isRideFinished')) { + MapPassengerController mapController = + Get.find(); + Get.snackbar('Ride Finished'.tr, '', + backgroundColor: AppColor.greenColor); + mapController.isRideFinished = true; + update(); } } }); @@ -305,7 +305,8 @@ class FirebaseMessagesController extends GetxController { var passengerList = message.data['passengerList']; print(passengerList); print('9999999999999my Apply Ride 999999999999999'); - MapController mapController = Get.find(); + MapPassengerController mapController = + Get.find(); mapController.rideConfirm = false; update(); print('-----------------------------rideConfirm===' + @@ -382,7 +383,7 @@ class FirebaseMessagesController extends GetxController { title: 'The Ride is Begin'.tr, backgroundColor: AppColor.greenColor, ); - MapDirection().clearPolyline(); + MapDriverController().clearPolyline(); } }); } diff --git a/lib/controller/home/captin/map_dirction.dart b/lib/controller/home/captin/map_driver_controller.dart similarity index 85% rename from lib/controller/home/captin/map_dirction.dart rename to lib/controller/home/captin/map_driver_controller.dart index e60e5fa..cee0827 100644 --- a/lib/controller/home/captin/map_dirction.dart +++ b/lib/controller/home/captin/map_driver_controller.dart @@ -14,7 +14,7 @@ import '../../../constant/credential.dart'; import '../../../constant/links.dart'; import '../../functions/crud.dart'; -class MapDirection extends GetxController { +class MapDriverController extends GetxController { bool isLoading = true; List data = []; LatLngBounds? boundsData; @@ -34,6 +34,7 @@ class MapDirection extends GetxController { late String direction; bool isPassengerInfoWindow = false; bool isBtnRideBegin = false; + bool isRideFinished = false; double passengerInfoWindow = Get.height * .32; double progress = 0; double progressToPassenger = 0; @@ -93,7 +94,7 @@ class MapDirection extends GetxController { update(); } - void changeRideToBegin() { + void changeRideToBeginToPassenger() { isRideBegin = true; passengerInfoWindow = Get.height * .22; update(); @@ -119,6 +120,7 @@ class MapDirection extends GetxController { } } + String stringRemainingTimeToPassenger = ''; void startTimerToShowDriverToPassengerDuration() async { for (int i = 0; i <= int.parse(durationToPassenger); i++) { await Future.delayed(const Duration(seconds: 1)); @@ -131,19 +133,52 @@ class MapDirection extends GetxController { } print(isBtnRideBegin); print(remainingTimeToPassenger); + + int minutes = (remainingTimeToPassenger / 60).floor(); + int seconds = remainingTimeToPassenger % 60; + stringRemainingTimeToPassenger = + '$minutes:${seconds.toString().padLeft(2, '0')}'; + update(); } } - beginRideFromDriver() async { - changeRideToBegin(); + void driverGoToPassenger() async { + changeRideToBeginToPassenger(); + await CRUD().post(link: AppLink.updateRides, payload: { + 'id': rideId, + 'driverGoToPassengerTime': DateTime.now().toString(), + 'status': 'Applied' + }); + FirebaseMessagesController().sendNotificationToAnyWithoutData( + 'DriverIsGoingToPassenger', + box.read(BoxName.name).toString(), + tokenPassenger); + } + + void beginRideFromDriver() async { + changeRideToBeginToPassenger(); + isPassengerInfoWindow = false; + isRideFinished = true; + update(); await CRUD().post(link: AppLink.updateRides, payload: { 'id': rideId, 'rideTimeStart': DateTime.now().toString(), - 'status': 'Applied' + 'status': 'Begin' }); - FirebaseMessagesController().sendNotificationToAnyWithoutData('RideIsBegin', - box.read(BoxName.tokenDriver).toString(), tokenPassenger); + // FirebaseMessagesController().sendNotificationToAnyWithoutData( + // 'RideIsBegin', box.read(BoxName.name).toString(), tokenPassenger); + } + + void finishRideFromDriver() async { + // changeRideToBeginToPassenger(); + await CRUD().post(link: AppLink.updateRides, payload: { + 'id': rideId, + 'rideTimeStart': DateTime.now().toString(), + 'status': 'Finished' + }); + FirebaseMessagesController().sendNotificationToAnyWithoutData( + 'isRideFinished', box.read(BoxName.name).toString(), tokenPassenger); } void updateMarker() { diff --git a/lib/controller/home/map_page_controller.dart b/lib/controller/home/map_passenger_controller.dart similarity index 89% rename from lib/controller/home/map_page_controller.dart rename to lib/controller/home/map_passenger_controller.dart index e67692a..646e20e 100644 --- a/lib/controller/home/map_page_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -9,6 +9,7 @@ import 'package:location/location.dart'; import 'package:ride/constant/box_name.dart'; import 'package:ride/constant/credential.dart'; import 'package:ride/constant/links.dart'; +import 'package:ride/constant/style.dart'; import 'package:ride/controller/firebase/firbase_messge.dart'; import 'package:ride/controller/functions/crud.dart'; import 'package:ride/controller/functions/secure_storage.dart'; @@ -17,7 +18,7 @@ import 'package:ride/views/widgets/elevated_btn.dart'; import '../../main.dart'; import '../../models/model/locations.dart'; -class MapController extends GetxController { +class MapPassengerController extends GetxController { bool isLoading = true; TextEditingController placeController = TextEditingController(); List data = []; @@ -50,7 +51,7 @@ class MapController extends GetxController { bool isCancelRidePageShown = false; bool isCashConfirmPageShown = false; bool isPaymentMethodPageShown = false; - + bool isRideFinished = false; bool rideConfirm = false; bool isMainBottomMenuMap = true; double heightBottomSheetShown = 0; @@ -70,10 +71,16 @@ class MapController extends GetxController { double progress = 0; double progressTimerToPassengerFromDriverAfterApplied = 0; int durationTimer = 25; + late int durationToRide; int remainingTime = 25; int remainingTimeToPassengerFromDriverAfterApplied = 60; int timeToPassengerFromDriverAfterApplied = 0; Timer? timerToPassengerFromDriverAfterApplied; + bool rideTimerBegin = false; + late double progressTimerRideBegin; + int remainingTimeTimerRideBegin = 60; + late String stringRemainingTimeRideBegin; + void onChangedPassengerCount(int newValue) { selectedPassengerCount = newValue; update(); @@ -125,6 +132,8 @@ class MapController extends GetxController { update(); } + String stringRemainingTimeToPassenger = ''; + void startTimerToPassengerFromDriverAfterApplied() async { for (int i = 0; i <= timeToPassengerFromDriverAfterApplied; i++) { await Future.delayed(const Duration(seconds: 1)); @@ -132,16 +141,81 @@ class MapController extends GetxController { i / timeToPassengerFromDriverAfterApplied; remainingTimeToPassengerFromDriverAfterApplied = timeToPassengerFromDriverAfterApplied - i; - update(); - if (remainingTimeToPassengerFromDriverAfterApplied == 0) { - driverArrivePassenger(); + + if (remainingTimeToPassengerFromDriverAfterApplied < 69) { + if (rideTimerBegin == false) { + getBeginRideFromDriver(); + } } + + int minutes = + (remainingTimeToPassengerFromDriverAfterApplied / 60).floor(); + int seconds = remainingTimeToPassengerFromDriverAfterApplied % 60; + stringRemainingTimeToPassenger = + '$minutes:${seconds.toString().padLeft(2, '0')}'; + update(); + } + } + + void rideIsBeginPassengerTimer() async { + for (int i = 0; i <= durationToRide; i++) { + await Future.delayed(const Duration(seconds: 1)); + progressTimerRideBegin = i / durationToRide; + remainingTimeTimerRideBegin = durationToRide - i; + + int minutes = (remainingTimeTimerRideBegin / 60).floor(); + int seconds = remainingTimeTimerRideBegin % 60; + stringRemainingTimeRideBegin = + '$minutes:${seconds.toString().padLeft(2, '0')}'; + update(); + } + + rideTimerBegin = false; + isRideFinished = true; + update(); + print('rideTimerBegin: $rideTimerBegin'); + print('isRideFinished: $isRideFinished'); + + Get.defaultDialog( + title: 'Ride Is Finished.'.tr, + titleStyle: AppStyle.title, + content: Text( + 'Rate the Captain Please?'.tr, + style: AppStyle.title, + ), + confirm: MyElevatedButton( + title: 'Ok'.tr, + onPressed: () { + Get.back(); //todo make Rate page + }, + ), + barrierDismissible: false, + ); + } + + void getBeginRideFromDriver() async { + var res = await CRUD() + .get(link: AppLink.getRideStatusBegin, payload: {'ride_id': rideId}); + var decode = jsonDecode(res); + + if (decode['data']['status'] == 'Begin') { + timeToPassengerFromDriverAfterApplied = 0; + remainingTime = 0; + remainingTimeToPassengerFromDriverAfterApplied = 0; + // isCancelRidePageShown = true; + rideIsBeginPassengerTimer(); + // print('rideTimerBegin: $rideTimerBegin'); + rideTimerBegin = true; + update(); } } void driverArrivePassenger() { timeToPassengerFromDriverAfterApplied = 0; + remainingTime = 0; + // isCancelRidePageShown = true; update(); + rideIsBeginPassengerTimer(); } void cancelTimerToPassengerFromDriverAfterApplied() { @@ -161,7 +235,7 @@ class MapController extends GetxController { update(); } - var rideId; + late String rideId; late String driverToken; int carsOrder = 0; changeConfirmRide() async { @@ -214,6 +288,7 @@ class MapController extends GetxController { dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(), duration1.toString(), rideId, + rideTimerBegin.toString(), ]; FirebaseMessagesController().sendNotificationToDriverMAP( 'Order', @@ -297,43 +372,48 @@ class MapController extends GetxController { } Future getCarsLocationByPassenger() async { - carsLocationByPassenger = []; - LatLngBounds bounds = - calculateBounds(myLocation.latitude, myLocation.longitude, 8000); - print( - 'Southwest: ${bounds.southwest.latitude}, ${bounds.southwest.longitude}'); - print( - 'Northeast: ${bounds.northeast.latitude}, ${bounds.northeast.longitude}'); + if (rideConfirm == false) { + carsLocationByPassenger = []; + LatLngBounds bounds = + calculateBounds(myLocation.latitude, myLocation.longitude, 8000); + print( + 'Southwest: ${bounds.southwest.latitude}, ${bounds.southwest.longitude}'); + print( + 'Northeast: ${bounds.northeast.latitude}, ${bounds.northeast.longitude}'); - var res = - await CRUD().get(link: AppLink.getCarsLocationByPassenger, payload: { - 'southwestLat': southwest.latitude.toString(), - 'southwestLon': southwest.longitude.toString(), - 'northeastLat': northeast.latitude.toString(), - 'northeastLon': northeast.longitude.toString(), - }); - if (res == 'failure') { - Get.defaultDialog( - title: 'No Car in your site.Sorry!', - middleText: '', - confirm: MyElevatedButton( - title: 'Back', - onPressed: () { - Get.back(); - markerReloadingTimer.cancel(); - })); - } else { - dataCarsLocationByPassenger = jsonDecode(res); - // print(dataCarsLocationByPassenger); + var res = + await CRUD().get(link: AppLink.getCarsLocationByPassenger, payload: { + 'southwestLat': southwest.latitude.toString(), + 'southwestLon': southwest.longitude.toString(), + 'northeastLat': northeast.latitude.toString(), + 'northeastLon': northeast.longitude.toString(), + }); + if (res == 'failure') { + Get.defaultDialog( + title: 'No Car in your site.Sorry!', + middleText: '', + confirm: MyElevatedButton( + title: 'Back', + onPressed: () { + Get.back(); + markerReloadingTimer.cancel(); + })); + } else { + dataCarsLocationByPassenger = jsonDecode(res); + // print(dataCarsLocationByPassenger); - for (var i = 0; i < dataCarsLocationByPassenger['message'].length; i++) { - carsLocationByPassenger.add(LatLng( - double.parse(dataCarsLocationByPassenger['message'][i]['latitude']), - double.parse( - dataCarsLocationByPassenger['message'][i]['longitude']))); + for (var i = 0; + i < dataCarsLocationByPassenger['message'].length; + i++) { + carsLocationByPassenger.add(LatLng( + double.parse( + dataCarsLocationByPassenger['message'][i]['latitude']), + double.parse( + dataCarsLocationByPassenger['message'][i]['longitude']))); + } + + update(); } - - update(); } } @@ -690,6 +770,7 @@ class MapController extends GetxController { distanceByPassenger = data['rows'][0]['elements'][0]['distance']['text']; duration1 = data['rows'][0]['elements'][0]['duration']['value']; + durationFromDriverToPassenger = Duration(seconds: duration1.toInt()); newTime1 = currentTime.add(durationFromDriverToPassenger); timeFromDriverToPassenger = @@ -744,6 +825,7 @@ class MapController extends GetxController { var response = await CRUD().getGoogleApi(link: url, payload: {}); data = response['routes'][0]['legs']; print(data); + durationToRide = data[0]['duration']['value']; final points = decodePolyline(response["routes"][0]["overview_polyline"]["points"]); for (int i = 0; i < points.length; i++) { diff --git a/lib/controller/payment/payment_controller.dart b/lib/controller/payment/payment_controller.dart index eab82fb..384f5d0 100644 --- a/lib/controller/payment/payment_controller.dart +++ b/lib/controller/payment/payment_controller.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:ride/controller/home/map_page_controller.dart'; +import 'package:ride/controller/home/map_passenger_controller.dart'; import '../../constant/box_name.dart'; import '../../constant/links.dart'; @@ -17,7 +17,7 @@ class PaymentController extends GetxController { bool isPromoSheetDialogue = false; final formKey = GlobalKey(); final promo = TextEditingController(); - double totalPassenger = MapController().totalPassenger; + double totalPassenger = MapPassengerController().totalPassenger; int? selectedAmount = 0; List totalPassengerWalletDetails = []; String passengerTotalWalletAmount = ''; @@ -70,7 +70,7 @@ class PaymentController extends GetxController { var firstElement = decod["message"][0]; totalPassenger = totalPassenger - (totalPassenger * int.parse(firstElement['amount'])); - MapController().promoTaken = true; + MapPassengerController().promoTaken = true; update(); print(totalPassenger); } diff --git a/lib/main.dart b/lib/main.dart index d2ff00e..d32a174 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:ride/constant/info.dart'; +import 'package:ride/controller/home/map_passenger_controller.dart'; import 'package:ride/views/auth/captin/login_captin.dart'; import 'package:ride/views/auth/login_page.dart'; import 'package:ride/views/home/Captin/home_captin.dart'; @@ -13,6 +14,7 @@ import 'package:ride/views/home/Captin/home_captin.dart'; import 'constant/box_name.dart'; import 'controller/firebase/firbase_messge.dart'; import 'controller/functions/location_permission.dart'; +import 'controller/home/captin/map_driver_controller.dart'; import 'controller/local/local_controller.dart'; import 'controller/local/translations.dart'; import 'firebase_options.dart'; @@ -32,6 +34,7 @@ Future backgroundMessageHandler(RemoteMessage message) async { void main() async { WidgetsFlutterBinding.ensureInitialized(); await GetStorage.init(); + if (Platform.isAndroid || Platform.isIOS) { await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, @@ -39,14 +42,19 @@ void main() async { } await FirebaseMessagesController().requestFirebaseMessagingPermission(); - // await FirebasMessagesController().getNotificationSettings(); - await FirebaseMessagesController().getToken(); - // await FirebasMessagesController().getTokens(); + LocationPermissions().locationPermissions(); FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); - // if (box.read(BoxName.driverID) != null) { - // LocationController().startLocationUpdates(); - // } + + List initializationTasks = [ + FirebaseMessagesController().getNotificationSettings(), + // FirebaseMessagesController().getTokens(), + FirebaseMessagesController().getToken(), + // Add more initialization tasks here + ]; + + await Future.wait(initializationTasks); + runApp(const MyApp()); } diff --git a/lib/views/home/map_page.dart b/lib/views/home/map_page.dart index b49e05c..41fdc9e 100644 --- a/lib/views/home/map_page.dart +++ b/lib/views/home/map_page.dart @@ -5,8 +5,9 @@ import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:ride/constant/colors.dart'; import 'package:ride/constant/style.dart'; -import 'package:ride/controller/home/map_page_controller.dart'; +import 'package:ride/controller/home/map_passenger_controller.dart'; import 'package:ride/views/home/map_widget.dart/cancel_raide_page.dart'; +import 'package:ride/views/home/map_widget.dart/ride_begin_passenger.dart'; import 'package:ride/views/widgets/circle_container.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; import 'package:ride/views/widgets/mycircular.dart'; @@ -30,7 +31,7 @@ class MapPage extends StatelessWidget { @override Widget build(BuildContext context) { - Get.put(MapController()); + Get.put(MapPassengerController()); Get.put(MyMenuController()); return Scaffold( // appBar: AppBar(), @@ -65,7 +66,7 @@ class MapPage extends StatelessWidget { body: SafeArea( child: Stack( children: [ - GetBuilder( + GetBuilder( builder: (controller) => controller.isLoading ? const MyCircularProgressIndicator() : GoogleMap( @@ -307,14 +308,15 @@ class MapPage extends StatelessWidget { const MenuIconMapPageWidget(), buttomSheetMapPage(), hexagonClipper(), - cancelRidePage(), + const CancelRidePageShow(), const CashConfirmPageShown(), const PaymentMethodPage(), timerForCancelTripFromPassenger(), // const DriverTimeArrivePassengerPage(), const TimerToPassengerFromDriver(), - // const PassengerInfoWindow() + const RideBeginPassenger(), + cancelRidePage(), ], ), ), @@ -329,7 +331,7 @@ class CancelRidePageShow extends StatelessWidget { @override Widget build(BuildContext context) { - return GetBuilder( + return GetBuilder( builder: (controller) => (controller.data.isNotEmpty && controller.remainingTime > 0) // || @@ -367,7 +369,7 @@ class PickerIconOnMap extends StatelessWidget { @override Widget build(BuildContext context) { - return GetBuilder( + return GetBuilder( builder: (controller) => Positioned( bottom: 0, top: 0, 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 8a23622..6632221 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 @@ -7,11 +7,11 @@ import 'package:ride/views/widgets/elevated_btn.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; -GetBuilder buttomSheetMapPage() { +GetBuilder buttomSheetMapPage() { Get.put(PaymentController()); - return GetBuilder( + return GetBuilder( builder: (controller) => controller.isBottomSheetShown && controller.rideConfirm == false ? Positioned( @@ -472,7 +472,7 @@ class Details extends StatelessWidget { @override Widget build(BuildContext context) { - return GetBuilder( + return GetBuilder( builder: (controller) => Column( children: [ Row( diff --git a/lib/views/home/map_widget.dart/cancel_raide_page.dart b/lib/views/home/map_widget.dart/cancel_raide_page.dart index 6525c10..f217a1b 100644 --- a/lib/views/home/map_widget.dart/cancel_raide_page.dart +++ b/lib/views/home/map_widget.dart/cancel_raide_page.dart @@ -2,12 +2,12 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:ride/constant/colors.dart'; import 'package:ride/constant/style.dart'; -import 'package:ride/controller/home/map_page_controller.dart'; +import 'package:ride/controller/home/map_passenger_controller.dart'; import '../../widgets/elevated_btn.dart'; -GetBuilder cancelRidePage() { - Get.put(MapController()); +GetBuilder cancelRidePage() { + Get.put(MapPassengerController()); final List reasons = [ "I don't need a ride anymore".tr, "I was just trying the application".tr, @@ -16,7 +16,7 @@ GetBuilder cancelRidePage() { "I don't have a reason".tr, "Other".tr, ]; - return GetBuilder( + return GetBuilder( builder: (controller) => controller.isCancelRidePageShown ? Positioned( left: 60, diff --git a/lib/views/home/map_widget.dart/cash_confirm_bottom_page.dart b/lib/views/home/map_widget.dart/cash_confirm_bottom_page.dart index 688c181..6874dbb 100644 --- a/lib/views/home/map_widget.dart/cash_confirm_bottom_page.dart +++ b/lib/views/home/map_widget.dart/cash_confirm_bottom_page.dart @@ -4,7 +4,7 @@ import 'package:ride/constant/box_name.dart'; import 'package:ride/constant/style.dart'; import '../../../constant/colors.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; import '../../../controller/payment/payment_controller.dart'; import '../../../main.dart'; @@ -15,7 +15,7 @@ class CashConfirmPageShown extends StatelessWidget { @override Widget build(BuildContext context) { - return GetBuilder( + return GetBuilder( builder: (controller) => Positioned( right: 5, bottom: 5, diff --git a/lib/views/home/map_widget.dart/driver_card_from_passenger.dart b/lib/views/home/map_widget.dart/driver_card_from_passenger.dart index 0eb4c66..a83c2d8 100644 --- a/lib/views/home/map_widget.dart/driver_card_from_passenger.dart +++ b/lib/views/home/map_widget.dart/driver_card_from_passenger.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../constant/style.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; import 'hexegone_clipper.dart'; -GetBuilder hexagonClipper() { - return GetBuilder( +GetBuilder hexagonClipper() { + return GetBuilder( builder: ((controller) => controller.rideConfirm ? Positioned( top: Get.height * .2, diff --git a/lib/views/home/map_widget.dart/driver_time_arrive_passenger.dart b/lib/views/home/map_widget.dart/driver_time_arrive_passenger.dart index 6b77fcd..680f899 100644 --- a/lib/views/home/map_widget.dart/driver_time_arrive_passenger.dart +++ b/lib/views/home/map_widget.dart/driver_time_arrive_passenger.dart @@ -4,14 +4,14 @@ import 'package:intl/intl.dart'; // import 'package:intl/intl.dart'; import '../../../constant/style.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; class DriverTimeArrivePassengerPage extends StatelessWidget { const DriverTimeArrivePassengerPage({super.key}); @override Widget build(BuildContext context) { - return GetBuilder( + return GetBuilder( builder: (controller) { return controller.remainingTime == 0 ? Positioned( diff --git a/lib/views/home/map_widget.dart/form_search_places.dart b/lib/views/home/map_widget.dart/form_search_places.dart index a0e7469..988ef32 100644 --- a/lib/views/home/map_widget.dart/form_search_places.dart +++ b/lib/views/home/map_widget.dart/form_search_places.dart @@ -6,12 +6,12 @@ import 'package:ride/views/widgets/elevated_btn.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/toast.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; import '../../../main.dart'; -GetBuilder formSearchPlaces() { +GetBuilder formSearchPlaces() { // DbSql sql = DbSql.instance; - return GetBuilder( + return GetBuilder( builder: (controller) => Column( children: [ Padding( diff --git a/lib/views/home/map_widget.dart/left_main_menu_icons.dart b/lib/views/home/map_widget.dart/left_main_menu_icons.dart index 8b33cf4..dff4191 100644 --- a/lib/views/home/map_widget.dart/left_main_menu_icons.dart +++ b/lib/views/home/map_widget.dart/left_main_menu_icons.dart @@ -2,10 +2,10 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../constant/colors.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; -GetBuilder leftMainMenuIcons() { - return GetBuilder( +GetBuilder leftMainMenuIcons() { + return GetBuilder( builder: (controller) => Positioned( top: 85, left: 6, diff --git a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart index c755f74..b41d783 100644 --- a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart +++ b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:ride/constant/box_name.dart'; import 'package:ride/constant/style.dart'; -import 'package:ride/controller/home/map_page_controller.dart'; +import 'package:ride/controller/home/map_passenger_controller.dart'; import 'package:ride/main.dart'; import 'package:ride/views/home/map_widget.dart/form_search_places.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; @@ -17,8 +17,8 @@ class MainBottomMenuMap extends StatelessWidget { @override Widget build(BuildContext context) { - Get.put(MapController()); - return GetBuilder( + Get.put(MapPassengerController()); + return GetBuilder( builder: (controller) => Positioned( bottom: 3, left: 5, @@ -143,8 +143,8 @@ class FavioratePlacesDialogu extends StatelessWidget { @override Widget build(BuildContext context) { - Get.put(MapController()); - return GetBuilder( + Get.put(MapPassengerController()); + return GetBuilder( builder: (controller) => DefaultTextStyle( style: AppStyle.title, child: Center( diff --git a/lib/views/home/map_widget.dart/map_menu_widget.dart b/lib/views/home/map_widget.dart/map_menu_widget.dart index a135463..2c3ea52 100644 --- a/lib/views/home/map_widget.dart/map_menu_widget.dart +++ b/lib/views/home/map_widget.dart/map_menu_widget.dart @@ -7,7 +7,7 @@ import 'package:ride/views/home/profile/order_history.dart'; import 'package:ride/views/home/profile/promos_passenger_page.dart'; import '../../../constant/colors.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; import '../../notification/notification_page.dart'; import '../../widgets/icon_widget_menu.dart'; import '../home_page.dart'; @@ -20,7 +20,7 @@ class MapMenuWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return GetBuilder( + return GetBuilder( builder: (controller) => Stack(children: [ Positioned( right: 60, diff --git a/lib/views/home/map_widget.dart/menu_map_page.dart b/lib/views/home/map_widget.dart/menu_map_page.dart index 74fca04..32d8dea 100644 --- a/lib/views/home/map_widget.dart/menu_map_page.dart +++ b/lib/views/home/map_widget.dart/menu_map_page.dart @@ -3,7 +3,7 @@ import 'package:get/get.dart'; import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; import '../../../main.dart'; class MenuIconMapPageWidget extends StatelessWidget { @@ -13,7 +13,7 @@ class MenuIconMapPageWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return GetBuilder( + return GetBuilder( builder: (controller) => Positioned( top: 30, left: box.read(BoxName.lang) != 'ar' ? 5 : null, diff --git a/lib/views/home/map_widget.dart/passenger_info_window.dart b/lib/views/home/map_widget.dart/passenger_info_window.dart index d46171f..3ffc13b 100644 --- a/lib/views/home/map_widget.dart/passenger_info_window.dart +++ b/lib/views/home/map_widget.dart/passenger_info_window.dart @@ -4,7 +4,7 @@ import 'package:get/get.dart'; import 'package:ride/constant/box_name.dart'; import 'package:ride/constant/colors.dart'; import 'package:ride/controller/firebase/firbase_messge.dart'; -import 'package:ride/controller/home/captin/map_dirction.dart'; +import 'package:ride/controller/home/captin/map_driver_controller.dart'; import 'package:ride/main.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; @@ -20,8 +20,8 @@ class PassengerInfoWindow extends StatelessWidget { @override Widget build(BuildContext context) { - Get.put(MapDirection()); - return GetBuilder( + Get.put(MapDriverController()); + return GetBuilder( builder: (controller) => controller.isPassengerInfoWindow == true ? Stack( children: [ @@ -166,9 +166,8 @@ class PassengerInfoWindow extends StatelessWidget { ), Center( child: Text( - controller.remainingTimeToPassenger - .toString() + - ' Seconds'.tr, + controller + .stringRemainingTimeToPassenger, style: AppStyle.title, ), ) @@ -188,47 +187,49 @@ class PassengerInfoWindow extends StatelessWidget { ), ], ) - : Positioned( - bottom: Get.height * .3, - left: 15, - child: Container( - decoration: AppStyle.boxDecoration, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Stack( - alignment: Alignment.center, + : controller.remainingTimeToShowPassengerInfoWindowFromDriver > 0 // + ? Positioned( + bottom: Get.height * .3, + left: 15, + child: Container( + decoration: AppStyle.boxDecoration, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Row( children: [ - const CircularProgressIndicator( - backgroundColor: AppColor.redColor, - strokeWidth: 10, - color: AppColor.redColor, - value: 1, + Stack( + alignment: Alignment.center, + children: [ + const CircularProgressIndicator( + backgroundColor: AppColor.redColor, + strokeWidth: 10, + color: AppColor.redColor, + value: 1, + ), + CircularProgressIndicator( + value: controller.progress, + // Set the color based on the "isNearEnd" condition + color: AppColor.yellowColor, + ), + Text( + '${controller.remainingTimeToShowPassengerInfoWindowFromDriver}', + style: AppStyle.number, + ), + ], ), - CircularProgressIndicator( - value: controller.progress, - // Set the color based on the "isNearEnd" condition - color: AppColor.yellowColor, + const SizedBox( + width: 10, ), Text( - '${controller.remainingTimeToShowPassengerInfoWindowFromDriver}', - style: AppStyle.number, + 'Please Wait If passenger want To Cancel!'.tr, + style: AppStyle.title, ), ], ), - const SizedBox( - width: 10, - ), - Text( - 'Please Wait If passenger want To Cancel!'.tr, - style: AppStyle.title, - ), - ], + ), ), - ), - ), - ), + ) + : const SizedBox(), ); } } diff --git a/lib/views/home/map_widget.dart/payment_method.page.dart b/lib/views/home/map_widget.dart/payment_method.page.dart index 106b37c..05dd0df 100644 --- a/lib/views/home/map_widget.dart/payment_method.page.dart +++ b/lib/views/home/map_widget.dart/payment_method.page.dart @@ -9,7 +9,7 @@ import 'package:ride/views/widgets/elevated_btn.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/digit_obsecur_formate.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; class PaymentMethodPage extends StatelessWidget { const PaymentMethodPage({ @@ -18,7 +18,7 @@ class PaymentMethodPage extends StatelessWidget { @override Widget build(BuildContext context) { - return GetBuilder( + return GetBuilder( builder: (controller) => Positioned( right: 5, bottom: 5, diff --git a/lib/views/home/map_widget.dart/picker_animation_container.dart b/lib/views/home/map_widget.dart/picker_animation_container.dart index 6b2234e..4449b55 100644 --- a/lib/views/home/map_widget.dart/picker_animation_container.dart +++ b/lib/views/home/map_widget.dart/picker_animation_container.dart @@ -4,7 +4,7 @@ import 'package:ride/constant/table_names.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; import '../../../main.dart'; import '../../widgets/elevated_btn.dart'; import 'form_search_places.dart'; @@ -13,11 +13,11 @@ class PickerAnimtionContainerFormPlaces extends StatelessWidget { PickerAnimtionContainerFormPlaces({ super.key, }); - final controller = MapController(); + final controller = MapPassengerController(); @override Widget build(BuildContext context) { // DbSql sql = DbSql.instance; - return GetBuilder( + return GetBuilder( builder: (controller) => Positioned( bottom: 0, left: 0, diff --git a/lib/views/home/map_widget.dart/ride_begin_passenger.dart b/lib/views/home/map_widget.dart/ride_begin_passenger.dart new file mode 100644 index 0000000..5c9528e --- /dev/null +++ b/lib/views/home/map_widget.dart/ride_begin_passenger.dart @@ -0,0 +1,96 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:ride/constant/links.dart'; +import 'package:ride/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'; + +class RideBeginPassenger extends StatelessWidget { + const RideBeginPassenger({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return GetBuilder(builder: (controller) { + if (controller.rideTimerBegin) { + return Positioned( + left: 10, + right: 10, + bottom: 4, + child: Container( + decoration: AppStyle.boxDecoration, + height: 200, + // width: 100, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + Text( + 'You will arrive to your destination after '.tr, + style: AppStyle.title, + ), + Stack( + children: [ + LinearProgressIndicator( + backgroundColor: AppColor.accentColor, + color: controller.remainingTimeTimerRideBegin < 60 + ? AppColor.redColor + : AppColor.greenColor, + minHeight: 50, + borderRadius: BorderRadius.circular(15), + value: controller.progressTimerRideBegin.toDouble(), + ), + Center( + child: Text( + controller.stringRemainingTimeRideBegin, + style: AppStyle.title, + ), + ) + ], + ), + controller.remainingTimeTimerRideBegin < 5 + ? MyElevatedButton( + title: + 'If you in destination Now. Press finish The Ride', + onPressed: () async { + //todo finish the trip and rest all counter ,start new counter of the trip time + + // await CRUD() + // .post(link: AppLink.updateRides, payload: { + // 'id': controller.rideId, + // 'rideTimeStart': DateTime.now().toString(), + // 'status': 'Applied' + // }); + // controller.driverArrivePassenger(); + // // Send notification to driver to alert him that trip is begin + // FirebaseMessagesController() + // .sendNotificationToAnyWithoutData( + // 'BeginTrip', + // box.read(BoxName.name).toString(), + // controller.driverToken.toString(), + // ); + // print(controller.driverToken.toString()); + // Get.defaultDialog( + // title: 'The Ride is Begin'.tr, + // backgroundColor: AppColor.greenColor, + // ); + }) + : const SizedBox() + ], + ), + ), + ), + ); + } else { + return const SizedBox(); + } + }); + } +} diff --git a/lib/views/home/map_widget.dart/timer_for_cancell_trip_from_passenger.dart b/lib/views/home/map_widget.dart/timer_for_cancell_trip_from_passenger.dart index d6b367c..43ca8b7 100644 --- a/lib/views/home/map_widget.dart/timer_for_cancell_trip_from_passenger.dart +++ b/lib/views/home/map_widget.dart/timer_for_cancell_trip_from_passenger.dart @@ -3,10 +3,10 @@ import 'package:get/get.dart'; import 'package:ride/views/home/map_page.dart'; import '../../../constant/style.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; -GetBuilder timerForCancelTripFromPassenger() { - return GetBuilder( +GetBuilder timerForCancelTripFromPassenger() { + return GetBuilder( builder: (controller) { final isNearEnd = controller.remainingTime <= 5; // Define a threshold for "near end" 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 d77a094..fe0017b 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 @@ -8,7 +8,7 @@ import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/firebase/firbase_messge.dart'; import '../../../controller/functions/crud.dart'; -import '../../../controller/home/map_page_controller.dart'; +import '../../../controller/home/map_passenger_controller.dart'; import '../../../main.dart'; class TimerToPassengerFromDriver extends StatelessWidget { @@ -18,7 +18,7 @@ class TimerToPassengerFromDriver extends StatelessWidget { @override Widget build(BuildContext context) { - return GetBuilder(builder: (controller) { + return GetBuilder(builder: (controller) { if (controller.remainingTime == 0 && controller.timeToPassengerFromDriverAfterApplied > 0) { return Positioned( @@ -55,9 +55,7 @@ class TimerToPassengerFromDriver extends StatelessWidget { ), Center( child: Text( - controller - .remainingTimeToPassengerFromDriverAfterApplied - .toString(), + controller.stringRemainingTimeToPassenger, style: AppStyle.title, ), ) diff --git a/lib/views/orderCaptin/passenger_location_dirction.dart b/lib/views/orderCaptin/driver_map_page.dart similarity index 55% rename from lib/views/orderCaptin/passenger_location_dirction.dart rename to lib/views/orderCaptin/driver_map_page.dart index 007bf25..f50cf18 100644 --- a/lib/views/orderCaptin/passenger_location_dirction.dart +++ b/lib/views/orderCaptin/driver_map_page.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:ride/controller/home/captin/map_dirction.dart'; +import 'package:ride/controller/home/captin/map_driver_controller.dart'; +import 'package:ride/views/widgets/elevated_btn.dart'; import 'package:ride/views/widgets/my_scafold.dart'; import '../../constant/colors.dart'; @@ -16,7 +17,7 @@ class PassengerLocationDirection extends StatelessWidget { final LocationController locationController = Get.put(LocationController()); @override Widget build(BuildContext context) { - Get.put(MapDirection()); + Get.put(MapDriverController()); // mapDirection.getMap();//todo get this argument return MyScafolld( @@ -24,7 +25,7 @@ class PassengerLocationDirection extends StatelessWidget { body: [ Padding( padding: const EdgeInsets.all(8.0), - child: GetBuilder( + child: GetBuilder( builder: (controller) => GoogleMap( onMapCreated: controller.onMapCreated, initialCameraPosition: CameraPosition( @@ -69,6 +70,50 @@ class PassengerLocationDirection extends StatelessWidget { ), ), const PassengerInfoWindow(), + GetBuilder( + builder: (mapDriverController) => mapDriverController + .isRideFinished + ? Positioned( + left: 5, + top: 5, + right: 5, + child: Container( + decoration: AppStyle.boxDecoration, + height: 60, + width: 200, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Column( + children: [ + const Icon(Icons.social_distance), + Text( + mapDriverController.distance.toString() + + ' ' + + 'KM'.tr, + style: AppStyle.title, + ), + ], + ), + MyElevatedButton( + title: 'End Ride'.tr, + onPressed: () {}, + kolor: AppColor.redColor, + ), + Column( + children: [ + const Icon(Icons.timelapse), + Text( + mapDriverController.duration.toString() + + ' ' + + 'Minute'.tr, + style: AppStyle.title), + ], + ), + ], + ), + )) + : const SizedBox()) ], isleading: true); } diff --git a/lib/views/orderCaptin/order_request_page.dart b/lib/views/orderCaptin/order_request_page.dart index af0d350..db372a4 100644 --- a/lib/views/orderCaptin/order_request_page.dart +++ b/lib/views/orderCaptin/order_request_page.dart @@ -3,7 +3,7 @@ import 'package:get/get.dart'; import 'package:ride/constant/box_name.dart'; import 'package:ride/controller/firebase/firbase_messge.dart'; import 'package:ride/main.dart'; -import 'package:ride/views/orderCaptin/passenger_location_dirction.dart'; +import 'package:ride/views/orderCaptin/driver_map_page.dart'; import 'package:ride/views/widgets/my_scafold.dart'; import '../../constant/colors.dart';