diff --git a/android/app/build.gradle b/android/app/build.gradle index 3c18a91..df1e8db 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -55,8 +55,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 23 targetSdkVersion flutter.targetSdkVersion - versionCode 4 - versionName '1.0.4' + versionCode 6 + versionName '1.0.6' } signingConfigs { diff --git a/lib/controller/functions/location_controller.dart b/lib/controller/functions/location_controller.dart index 226a225..015ad26 100644 --- a/lib/controller/functions/location_controller.dart +++ b/lib/controller/functions/location_controller.dart @@ -8,8 +8,6 @@ import 'package:ride/constant/links.dart'; import 'package:ride/controller/functions/crud.dart'; import 'package:ride/main.dart'; -import '../home/captin/home_captain_controller.dart'; - // LocationController.dart class LocationController extends GetxController { LocationData? _currentLocation; diff --git a/lib/controller/home/captin/map_dirction.dart b/lib/controller/home/captin/map_dirction.dart new file mode 100644 index 0000000..300e62e --- /dev/null +++ b/lib/controller/home/captin/map_dirction.dart @@ -0,0 +1,56 @@ +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:ride/constant/colors.dart'; + +import '../../../constant/credential.dart'; +import '../../../constant/links.dart'; +import '../../functions/crud.dart'; + +class MapDirction extends GetxController { + bool isLoading = true; + List data = []; + LatLngBounds? boundsdata; + + final List polylineCoordinates = []; + List polyLines = []; + + getMap(LatLng origin, destination) async { + isLoading = false; + + update(); + + var url = + ('${AppLink.googleMapsLink}directions/json?&language=en&avoid=tolls|ferries&destination=$destination&origin=$origin&key=${AppCredintials.mapAPIKEY}'); + + var response = await CRUD().getGoogleApi(link: url, payload: {}); + data = response['routes'][0]['legs']; + print(data); + final points = + decodePolyline(response["routes"][0]["overview_polyline"]["points"]); + for (int i = 0; i < points.length; i++) { + double lat = points[i][0].toDouble(); + double lng = points[i][1].toDouble(); + polylineCoordinates.add(LatLng(lat, lng)); + } + if (polyLines.isNotEmpty) { + // clearPolyline(); + } else { + var polyline = Polyline( + polylineId: PolylineId(response["routes"][0]["summary"]), + points: polylineCoordinates, + width: 10, + color: AppColor.blueColor, + ); + + // polyLines.add(polyline); + // rideConfirm = false; + update(); + } + } + + @override + void onInit() { + super.onInit(); + } +} diff --git a/lib/controller/home/map_page_controller.dart b/lib/controller/home/map_page_controller.dart index bc9aefb..2d94153 100644 --- a/lib/controller/home/map_page_controller.dart +++ b/lib/controller/home/map_page_controller.dart @@ -12,6 +12,7 @@ import 'package:ride/constant/links.dart'; import 'package:ride/controller/firebase/firbase_messge.dart'; import 'package:ride/controller/functions/crud.dart'; import 'package:ride/controller/functions/secure_storage.dart'; +import 'package:ride/controller/payment/payment_controller.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; import '../../main.dart'; import '../../models/model/locations.dart'; @@ -49,10 +50,12 @@ class MapController extends GetxController { bool isCancelRidePageShown = false; bool isCashConfirmPageShown = false; bool isPaymentMethodPageShown = false; + bool isPassengerInfoWindow = false; bool rideConfirm = false; bool isMainBottomMenuMap = true; double heightBottomSheetShown = 0; double cashConfirmPageShown = 250; + double passengerInfoWindow = 250; double widthMapTypeAndTraffic = 50; double paymentPageShown = Get.height * .6; late LatLng southwest; @@ -89,6 +92,12 @@ class MapController extends GetxController { update(); } + void changePassengerInfoWindow() { + isPassengerInfoWindow = !isPassengerInfoWindow; + passengerInfoWindow = isPassengerInfoWindow == true ? 200 : 0; + update(); + } + void changePaymentMethodPageShown() { isPaymentMethodPageShown = !isPaymentMethodPageShown; paymentPageShown = isPaymentMethodPageShown == true ? Get.height * .6 : 0; @@ -161,8 +170,10 @@ class MapController extends GetxController { var rideId; int carsOrder = 0; changeConfirmRide() async { + PaymentController paymentController = Get.find(); rideConfirm = true; shouldFetch = true; + isBottomSheetShown = false; timeToPassengerFromDriverAfterApplied = 60; update(); // print('rideConfirm= $rideConfirm'); @@ -203,6 +214,7 @@ class MapController extends GetxController { box.read(BoxName.phone).toString(), durationByPassenger.toString(), distanceByPassenger.toString(), + paymentController.isWalletChecked.toString() //todo if it is work ]; FirebasMessagesController().sendNotificationToDriverMAP( 'Order', @@ -255,6 +267,7 @@ class MapController extends GetxController { remainingTime = durationTimer - i; if (remainingTime == 0) { rideConfirm = false; + // print(timeToPassengerFromDriverAfterApplied); timeToPassengerFromDriverAfterApplied += duration1; // print(duration1); diff --git a/lib/controller/payment/payment_controller.dart b/lib/controller/payment/payment_controller.dart index d408d06..eab82fb 100644 --- a/lib/controller/payment/payment_controller.dart +++ b/lib/controller/payment/payment_controller.dart @@ -10,9 +10,9 @@ import '../../main.dart'; import '../functions/crud.dart'; class PaymentController extends GetxController { - bool isloading = false; - bool isWalletCheced = true; - bool isCashCheced = false; + bool isLoading = false; + bool isWalletChecked = true; + bool isCashChecked = false; bool isWalletFound = false; bool isPromoSheetDialogue = false; final formKey = GlobalKey(); @@ -32,7 +32,7 @@ class PaymentController extends GetxController { } getPassengerWallet() async { - isloading = true; + isLoading = true; update(); await CRUD().get( @@ -42,19 +42,19 @@ class PaymentController extends GetxController { jsonDecode(value)['message'][0]['total'].toString()); }); - isloading = false; + isLoading = false; update(); } - void onChangedPymentethodWallet(bool? value) { - isWalletCheced = !isWalletCheced; - isWalletCheced ? isCashCheced = false : isCashCheced = true; + void onChangedPaymentMethodWallet(bool? value) { + isWalletChecked = !isWalletChecked; + isWalletChecked ? isCashChecked = false : isCashChecked = true; update(); } - void onChangedPymentethodCash(bool? value) { - isCashCheced = !isCashCheced; - isCashCheced ? isWalletCheced = false : isWalletCheced = true; + void onChangedPaymentMethodCash(bool? value) { + isCashChecked = !isCashChecked; + isCashChecked ? isWalletChecked = false : isWalletChecked = true; update(); } diff --git a/lib/views/home/Captin/home_captin.dart b/lib/views/home/Captin/home_captin.dart index 52902db..7a934d3 100644 --- a/lib/views/home/Captin/home_captin.dart +++ b/lib/views/home/Captin/home_captin.dart @@ -9,6 +9,7 @@ import 'package:ride/controller/home/captin/home_captain_controller.dart'; import 'package:ride/controller/home/captin/order_request_controller.dart'; import 'package:ride/main.dart'; import 'package:ride/views/widgets/circle_container.dart'; +import 'package:ride/views/widgets/elevated_btn.dart'; import '../../../controller/functions/location_controller.dart'; import '../../../controller/home/captin/widget/connect.dart'; @@ -53,7 +54,15 @@ class HomeCaptain extends StatelessWidget { ))) ], ), - drawer: const Drawer(), + drawer: Drawer( + child: Column( + children: [ + // Other drawer items + + MyElevatedButton(title: 'Sign Out'.tr, onPressed: () {}) + ], + ), + ), body: Column( children: [ GetBuilder( diff --git a/lib/views/home/map_page.dart b/lib/views/home/map_page.dart index fca0942..2c80943 100644 --- a/lib/views/home/map_page.dart +++ b/lib/views/home/map_page.dart @@ -20,6 +20,7 @@ import 'map_widget.dart/left_main_menu_icons.dart'; import 'map_widget.dart/main_bottom_Menu_map.dart'; import 'map_widget.dart/map_menu_widget.dart'; import 'map_widget.dart/menu_map_page.dart'; +import 'map_widget.dart/passenger_info_window.dart'; import 'map_widget.dart/payment_method.page.dart'; import 'map_widget.dart/timer_for_cancell_trip_from_passenger.dart'; import 'map_widget.dart/timer_to_passenger_from_driver.dart'; @@ -210,10 +211,10 @@ class MapPage extends StatelessWidget { position: controller.myLocation, draggable: true, icon: controller.markerIcon, - infoWindow: InfoWindow( + infoWindow: const InfoWindow( title: 'Time', - snippet: controller.durationFromDriverToPassenger - .toString(), + // snippet: controller.durationFromDriverToPassenger + // .toString(), ), onDragEnd: (value) { print(value); @@ -313,6 +314,7 @@ class MapPage extends StatelessWidget { timerForCancelTripFromPassenger(), // const DriverTimeArrivePassengerPage(), const TimerToPassengerFromDriver(), + const PassengerInfoWindow() ], ), ), @@ -329,8 +331,9 @@ class CancelRidePageShow extends StatelessWidget { Widget build(BuildContext context) { return GetBuilder( builder: (controller) => - (controller.data.isNotEmpty && controller.remainingTime > 0) || - controller.timeToPassengerFromDriverAfterApplied == 0 + (controller.data.isNotEmpty && controller.remainingTime > 0) + // || + // controller.timeToPassengerFromDriverAfterApplied == 0 ? Positioned.directional( end: 10, top: 55, 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 2bc4fc9..a28d30a 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 @@ -192,7 +192,7 @@ GetBuilder buttomSheetMapPage() { builder: (paymentController) => paymentController - .isCashCheced + .isCashChecked ? Text( 'CASH', style: AppStyle 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 033d837..688c181 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 @@ -74,10 +74,10 @@ class CashConfirmPageShown extends StatelessWidget { ), const Spacer(), Checkbox.adaptive( - value: paymentController.isWalletCheced, + value: paymentController.isWalletChecked, onChanged: (value) { paymentController - .onChangedPymentethodWallet(value); + .onChangedPaymentMethodWallet(value); }, ) ], @@ -109,10 +109,10 @@ class CashConfirmPageShown extends StatelessWidget { const Spacer(), GetBuilder( builder: (controller) => Checkbox.adaptive( - value: controller.isCashCheced, + value: controller.isCashChecked, onChanged: (value) { controller - .onChangedPymentethodCash(value); + .onChangedPaymentMethodCash(value); }, )) ], diff --git a/lib/views/home/map_widget.dart/passenger_info_window.dart b/lib/views/home/map_widget.dart/passenger_info_window.dart new file mode 100644 index 0000000..cb67920 --- /dev/null +++ b/lib/views/home/map_widget.dart/passenger_info_window.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import '../../../constant/style.dart'; +import '../../../controller/home/map_page_controller.dart'; + +class PassengerInfoWindow extends StatelessWidget { + const PassengerInfoWindow({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return GetBuilder( + builder: (controller) => controller.isPassengerInfoWindow + ? Positioned( + bottom: 2, + child: AnimatedContainer( + duration: const Duration(milliseconds: 300), + height: controller.passengerInfoWindow, + width: Get.width, + decoration: AppStyle.boxDecoration, + ), + ) + : const SizedBox()); + } +} 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 d55ca34..d59014a 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,8 +1,11 @@ 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/colors.dart'; import '../../../constant/style.dart'; +import '../../../controller/functions/crud.dart'; import '../../../controller/home/map_page_controller.dart'; class TimerToPassengerFromDriver extends StatelessWidget { @@ -14,14 +17,14 @@ class TimerToPassengerFromDriver extends StatelessWidget { Widget build(BuildContext context) { return GetBuilder(builder: (controller) { if (controller.remainingTime == 0 && - controller.timeToPassengerFromDriverAfterApplied > 60) { + controller.timeToPassengerFromDriverAfterApplied > 0) { return Positioned( left: 10, right: 10, - bottom: Get.height * .35, + bottom: 5, child: Container( decoration: AppStyle.boxDecoration, - height: 140, + height: 200, // width: 100, child: Padding( padding: const EdgeInsets.all(8.0), @@ -57,6 +60,27 @@ class TimerToPassengerFromDriver extends StatelessWidget { ) ], ), + controller.remainingTimeToPassengerFromDriverAfterApplied < 60 + ? MyElevatedButton( + title: 'If you in Car Now. Press Start The Ride', + onPressed: () async { + MapController mapController = + Get.find(); + //todo start the trip and rest all counter ,start new counter of the trip time + await CRUD() + .post(link: AppLink.updateRides, payload: { + 'id': mapController.rideId, + 'rideTimeStart': DateTime.now().toString(), + 'status': 'Applied' + }); + mapController.driverArrivePassenger(); + Get.snackbar( + 'The Ride is Begin'.tr, + '', + backgroundColor: AppColor.greenColor, + ); + }) + : const SizedBox() ], ), ), diff --git a/lib/views/orderCaptin/order_request_page.dart b/lib/views/orderCaptin/order_request_page.dart index 03dbb06..4daa550 100644 --- a/lib/views/orderCaptin/order_request_page.dart +++ b/lib/views/orderCaptin/order_request_page.dart @@ -3,6 +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/widgets/my_scafold.dart'; import '../../constant/colors.dart'; @@ -34,15 +35,27 @@ class OrderRequestPage extends StatelessWidget { // Text(message.notification!.body.toString()), Padding( padding: const EdgeInsets.all(8.0), - child: TextButton.icon( - onPressed: () { - String mapUrl = - 'https://www.google.com/maps/dir/${myList[0]}/${myList[1]}/'; - print(mapUrl); - launchUrl1(mapUrl); - }, - icon: const Icon(Icons.map), - label: Text('Rouats of Trip'.tr)), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + TextButton.icon( + onPressed: () { + String mapUrl = + 'https://www.google.com/maps/dir/${myList[0]}/${myList[1]}/'; + print(mapUrl); + launchUrl1(mapUrl); + }, + icon: const Icon(Icons.map), + label: Text('Rouats of Trip'.tr)), + myList[13].toString() == + 'true' //Visa or Cash Method from notify to driver + ? Text( + 'Visa', + style: AppStyle.title, + ) + : Text('Cash', style: AppStyle.title) + ], + ), ), Padding( @@ -173,7 +186,8 @@ class OrderRequestPage extends StatelessWidget { // box.read(BoxName.tokenDriver).toString(), bodyToPassenger, ); - Get.back(); //todo go to passenger + Get.back(); + Get.to(() => PassengerLocationDirection()); }, ), GetBuilder( diff --git a/lib/views/orderCaptin/passenger_location_dirction.dart b/lib/views/orderCaptin/passenger_location_dirction.dart new file mode 100644 index 0000000..6343b5f --- /dev/null +++ b/lib/views/orderCaptin/passenger_location_dirction.dart @@ -0,0 +1,33 @@ +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/views/widgets/my_scafold.dart'; + +import '../../controller/functions/location_controller.dart'; +import '../widgets/mycircular.dart'; + +class PassengerLocationDirection extends StatelessWidget { + PassengerLocationDirection({super.key}); + final LocationController locationController = Get.put(LocationController()); + // final MapDirection mapDirection = Get.find(); + @override + Widget build(BuildContext context) { + // mapDirection.getMap();//todo get this argument + return MyScafolld( + title: 'Map'.tr, + body: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: GetBuilder( + builder: (controller) => GoogleMap( + initialCameraPosition: CameraPosition( + target: locationController.myLocation, + zoom: 15, + ), + )), + ) + ], + isleading: true); + } +}