diff --git a/lib/constant/links.dart b/lib/constant/links.dart index b546025..8035c5c 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -133,6 +133,11 @@ class AppLink { "$ride/RegisrationCar/selectDriverAndCarForMishwariTrip.php"; static String updateRegisrationCar = "$ride/RegisrationCar/update.php"; +//-----------------mishwari------------------ + + static String addMishwari = "$ride/mishwari/add.php"; + static String getMishwari = "$ride/mishwari/get.php"; + //-----------------DriverOrder------------------ static String addDriverOrder = "$ride/driver_order/add.php"; diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart index f59e990..fbac8c0 100644 --- a/lib/controller/firebase/firbase_messge.dart +++ b/lib/controller/firebase/firbase_messge.dart @@ -1,6 +1,5 @@ import 'dart:convert'; import 'dart:io'; -import 'package:SEFER/views/home/HomePage/trip_monitor/trip_monitor.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -16,7 +15,6 @@ import '../../constant/style.dart'; import '../../main.dart'; import '../../views/Rate/rate_captain.dart'; import '../../views/home/map_page_passenger.dart'; -import '../../views/home/map_widget.dart/call_passenger_page.dart'; import '../../views/home/profile/promos_passenger_page.dart'; import '../auth/google_sign.dart'; import '../functions/audio_record1.dart'; diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart index c11cc62..cea551c 100644 --- a/lib/controller/home/map_passenger_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -1,6 +1,6 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:math' show cos; +import 'dart:math' show cos, pow, sqrt; import 'dart:math' as math; import 'package:SEFER/controller/functions/tts.dart'; @@ -892,33 +892,60 @@ class MapPassengerController extends GetxController { })); } - Map? extractCoordinatesFromWhatsAppLink(String link) { + Map? extractCoordinatesFromLink(String link) { try { + // Extract the URL part from the link by finding the first occurrence of "http" + int urlStartIndex = link.indexOf(RegExp(r'https?://')); + if (urlStartIndex == -1) { + throw FormatException('No URL found in the provided link.'); + } + + // Extract the URL and clean it + link = link.substring(urlStartIndex).trim(); + Uri uri = Uri.parse(link); - if (uri.host == 'maps.google.com' || uri.host == 'www.google.com') { - String? query = uri.queryParameters['q']; - query ??= uri.queryParameters['ll']; - - if (query != null) { - List coordinates = query.split(','); + // Common coordinate query parameters + List coordinateParams = ['q', 'cp', 'll']; + // Try to extract coordinates from query parameters + for (var param in coordinateParams) { + String? value = uri.queryParameters[param]; + if (value != null && (value.contains(',') || value.contains('~'))) { + List coordinates = + value.contains(',') ? value.split(',') : value.split('~'); if (coordinates.length == 2) { - double latitude = double.parse(coordinates[0]); - double longitude = double.parse(coordinates[1]); - - return { - 'latitude': latitude, - 'longitude': longitude, - }; + double? latitude = double.tryParse(coordinates[0].trim()); + double? longitude = double.tryParse(coordinates[1].trim()); + if (latitude != null && longitude != null) { + return { + 'latitude': latitude, + 'longitude': longitude, + }; + } + } + } + } + + // Try to extract coordinates from the path + List pathSegments = uri.pathSegments; + for (var segment in pathSegments) { + if (segment.contains(',')) { + List coordinates = segment.split(','); + if (coordinates.length == 2) { + double? latitude = double.tryParse(coordinates[0].trim()); + double? longitude = double.tryParse(coordinates[1].trim()); + if (latitude != null && longitude != null) { + return { + 'latitude': latitude, + 'longitude': longitude, + }; + } } } - } else if (uri.host == 'goo.gl') { - // Shortened URLs might need to be expanded first - // Implement additional logic to expand the URL here if necessary } } catch (e) { - print('Error parsing WhatsApp location link: $e'); + print('Error parsing location link: $e'); } return null; @@ -927,7 +954,7 @@ class MapPassengerController extends GetxController { double latitudeWhatsApp = 0; double longitudeWhatsApp = 0; void handleWhatsAppLink(String link) { - Map? coordinates = extractCoordinatesFromWhatsAppLink(link); + Map? coordinates = extractCoordinatesFromLink(link); if (coordinates != null) { latitudeWhatsApp = coordinates['latitude']!; @@ -1289,118 +1316,275 @@ class MapPassengerController extends GetxController { late LatLng currentDriverLocation; late double headingList; - Future getCarsLocationByPassengerAndReloadMarker() async { + // Future getCarsLocationByPassengerAndReloadMarker() async { + // if (statusRide == 'wait') { + // carsLocationByPassenger = []; + // LatLngBounds bounds = calculateBounds( + // passengerLocation.latitude, passengerLocation.longitude, 7000); + // var res; + // if (box.read(BoxName.carType) == 'Lady') { + // res = await CRUD() + // .get(link: AppLink.getFemalDriverLocationByPassenger, payload: { + // 'southwestLat': bounds.southwest.latitude.toString(), + // 'southwestLon': bounds.southwest.longitude.toString(), + // 'northeastLat': bounds.northeast.latitude.toString(), + // 'northeastLon': bounds.northeast.longitude.toString(), + // }); + // } else if (box.read(BoxName.carType) == 'Speed') { + // res = await CRUD().get( + // link: AppLink.getCarsLocationByPassengerSpeed, + // payload: { + // 'southwestLat': bounds.southwest.latitude.toString(), + // 'southwestLon': bounds.southwest.longitude.toString(), + // 'northeastLat': bounds.northeast.latitude.toString(), + // 'northeastLon': bounds.northeast.longitude.toString(), + // }, + // ); + // } else if (box.read(BoxName.carType) == 'Delivery') { + // res = await CRUD().get( + // link: AppLink.getCarsLocationByPassengerDelivery, + // payload: { + // 'southwestLat': bounds.southwest.latitude.toString(), + // 'southwestLon': bounds.southwest.longitude.toString(), + // 'northeastLat': bounds.northeast.latitude.toString(), + // 'northeastLon': bounds.northeast.longitude.toString(), + // }, + // ); + // } else { + // res = await CRUD() + // .get(link: AppLink.getCarsLocationByPassenger, payload: { + // 'southwestLat': bounds.southwest.latitude.toString(), + // 'southwestLon': bounds.southwest.longitude.toString(), + // 'northeastLat': bounds.northeast.latitude.toString(), + // 'northeastLon': bounds.northeast.longitude.toString(), + // }); + // } + // if (res == 'failure') { + // noCarString = true; + // dataCarsLocationByPassenger = res; + // update(); + // } else { + // // Get.snackbar('no car', 'message'); + // noCarString = false; + // dataCarsLocationByPassenger = jsonDecode(res); + // // if (dataCarsLocationByPassenger.length > carsOrder) { + // driverId = dataCarsLocationByPassenger['message'][carsOrder] + // ['driver_id'] + // .toString(); + // gender = dataCarsLocationByPassenger['message'][carsOrder]['gender'] + // .toString(); + // // } + + // carsLocationByPassenger.clear(); // Clear existing markers + + // // late LatLng lastDriverLocation; // Initialize a variable for last location + + // for (var i = 0; + // i < dataCarsLocationByPassenger['message'].length; + // i++) { + // var json = dataCarsLocationByPassenger['message'][i]; + // // CarLocationModel model = CarLocationModel.fromJson(json); + // if (carLocationsModels.length < i + 1) { + // // carLocationsModels.add(model); + // markers.add( + // Marker( + // markerId: MarkerId(json['latitude']), + // position: LatLng( + // double.parse(json['latitude']), + // double.parse(json['longitude']), + // ), + // rotation: double.parse(json['heading']), + // icon: json['model'].toString().contains('دراجة') + // ? motoIcon + // : json['gender'] == 'Male'.tr + // ? carIcon + // : ladyIcon, + // ), + // ); + // driversToken.add(json['token']); + // // driversToken = json['token']; + // } else { + // // carLocationsModels[i] = model; + // markers[i] = Marker( + // markerId: MarkerId(json['latitude']), + // position: LatLng( + // double.parse(json['latitude']), + // double.parse(json['longitude']), + // ), + // rotation: double.parse(json['heading']), + // icon: json['model'].contains('دراجة') + // ? motoIcon + // : json['gender'] == 'Male'.tr + // ? carIcon + // : ladyIcon, + // ); + // // driversToken = json['token']; + // driversToken.add(json['token']); + // } + // } + // } + + // update(); + // } + // } + + Map _animationTimers = {}; + final int updateIntervalMs = 100; // Update every 100ms + final double minMovementThreshold = + 1.0; // Minimum movement in meters to trigger update + + Future getCarsLocationByPassengerAndReloadMarker() async { if (statusRide == 'wait') { - carsLocationByPassenger = []; LatLngBounds bounds = calculateBounds( passengerLocation.latitude, passengerLocation.longitude, 7000); - var res; - if (box.read(BoxName.carType) == 'Lady') { - res = await CRUD() - .get(link: AppLink.getFemalDriverLocationByPassenger, payload: { - 'southwestLat': bounds.southwest.latitude.toString(), - 'southwestLon': bounds.southwest.longitude.toString(), - 'northeastLat': bounds.northeast.latitude.toString(), - 'northeastLon': bounds.northeast.longitude.toString(), - }); - } else if (box.read(BoxName.carType) == 'Speed') { - res = await CRUD().get( - link: AppLink.getCarsLocationByPassengerSpeed, - payload: { - 'southwestLat': bounds.southwest.latitude.toString(), - 'southwestLon': bounds.southwest.longitude.toString(), - 'northeastLat': bounds.northeast.latitude.toString(), - 'northeastLon': bounds.northeast.longitude.toString(), - }, - ); - } else if (box.read(BoxName.carType) == 'Delivery') { - res = await CRUD().get( - link: AppLink.getCarsLocationByPassengerDelivery, - payload: { - 'southwestLat': bounds.southwest.latitude.toString(), - 'southwestLon': bounds.southwest.longitude.toString(), - 'northeastLat': bounds.northeast.latitude.toString(), - 'northeastLon': bounds.northeast.longitude.toString(), - }, - ); - } else { - res = await CRUD() - .get(link: AppLink.getCarsLocationByPassenger, payload: { - 'southwestLat': bounds.southwest.latitude.toString(), - 'southwestLon': bounds.southwest.longitude.toString(), - 'northeastLat': bounds.northeast.latitude.toString(), - 'northeastLon': bounds.northeast.longitude.toString(), - }); - } + + var res = await _fetchCarLocations(bounds); + if (res == 'failure') { noCarString = true; dataCarsLocationByPassenger = res; - update(); } else { - // Get.snackbar('no car', 'message'); noCarString = false; dataCarsLocationByPassenger = jsonDecode(res); - // if (dataCarsLocationByPassenger.length > carsOrder) { + driverId = dataCarsLocationByPassenger['message'][carsOrder] ['driver_id'] .toString(); gender = dataCarsLocationByPassenger['message'][carsOrder]['gender'] .toString(); - // } - carsLocationByPassenger.clear(); // Clear existing markers - - // late LatLng lastDriverLocation; // Initialize a variable for last location - - for (var i = 0; - i < dataCarsLocationByPassenger['message'].length; - i++) { - var json = dataCarsLocationByPassenger['message'][i]; - // CarLocationModel model = CarLocationModel.fromJson(json); - if (carLocationsModels.length < i + 1) { - // carLocationsModels.add(model); - markers.add( - Marker( - markerId: MarkerId(json['latitude']), - position: LatLng( - double.parse(json['latitude']), - double.parse(json['longitude']), - ), - rotation: double.parse(json['heading']), - icon: json['model'].toString().contains('دراجة') - ? motoIcon - : json['gender'] == 'Male'.tr - ? carIcon - : ladyIcon, - ), - ); - driversToken.add(json['token']); - // driversToken = json['token']; - } else { - // carLocationsModels[i] = model; - markers[i] = Marker( - markerId: MarkerId(json['latitude']), - position: LatLng( - double.parse(json['latitude']), - double.parse(json['longitude']), - ), - rotation: double.parse(json['heading']), - icon: json['model'].contains('دراجة') - ? motoIcon - : json['gender'] == 'Male'.tr - ? carIcon - : ladyIcon, - ); - // driversToken = json['token']; - driversToken.add(json['token']); - } - } + _updateMarkers(dataCarsLocationByPassenger['message']); } update(); } } + Future _fetchCarLocations(LatLngBounds bounds) async { + var payload = { + 'southwestLat': bounds.southwest.latitude.toString(), + 'southwestLon': bounds.southwest.longitude.toString(), + 'northeastLat': bounds.northeast.latitude.toString(), + 'northeastLon': bounds.northeast.longitude.toString(), + }; + + String link; + switch (box.read(BoxName.carType)) { + case 'Lady': + link = AppLink.getFemalDriverLocationByPassenger; + break; + case 'Speed': + link = AppLink.getCarsLocationByPassengerSpeed; + break; + case 'Delivery': + link = AppLink.getCarsLocationByPassengerDelivery; + break; + default: + link = AppLink.getCarsLocationByPassenger; + } + + return await CRUD().get(link: link, payload: payload); + } + + void _updateMarkers(List carsData) { + driversToken.clear(); + + for (var json in carsData) { + String markerId = json['driver_id'].toString(); + LatLng newPosition = LatLng( + double.parse(json['latitude']), + double.parse(json['longitude']), + ); + double newHeading = double.parse(json['heading']); + BitmapDescriptor icon = _getIconForCar(json); + + _updateOrCreateMarker(markerId, newPosition, newHeading, icon); + driversToken.add(json['token']); + } + + // Remove markers for cars that are no longer present + markers.removeWhere((marker) => !carsData + .any((car) => car['driver_id'].toString() == marker.markerId.value)); + } + + BitmapDescriptor _getIconForCar(Map carData) { + if (carData['model'].toString().contains('دراجة')) { + return motoIcon; + } else if (carData['gender'] == 'Male'.tr) { + return carIcon; + } else { + return ladyIcon; + } + } + + void _updateOrCreateMarker(String markerId, LatLng newPosition, + double newHeading, BitmapDescriptor icon) { + Marker? existingMarker = markers.cast().firstWhere( + (m) => m?.markerId == MarkerId(markerId), + orElse: () => null, + ); + + if (existingMarker == null) { + markers.add(Marker( + markerId: MarkerId(markerId), + position: newPosition, + rotation: newHeading, + icon: icon, + )); + } else { + double distance = + _calculateDistance(existingMarker.position, newPosition); + if (distance >= minMovementThreshold) { + _smoothlyUpdateMarker(existingMarker, newPosition, newHeading, icon); + } + } + } + + void _smoothlyUpdateMarker(Marker oldMarker, LatLng newPosition, + double newHeading, BitmapDescriptor icon) { + String markerId = oldMarker.markerId.value; + LatLng startPosition = oldMarker.position; + double startHeading = oldMarker.rotation ?? 0; + + _animationTimers[markerId]?.cancel(); + _animationTimers[markerId] = + Timer.periodic(Duration(milliseconds: updateIntervalMs), (timer) { + double progress = + timer.tick / (500 / updateIntervalMs); // 500ms total duration + if (progress >= 1.0) { + timer.cancel(); + _animationTimers.remove(markerId); + progress = 1.0; + } + + LatLng intermediatePosition = LatLng( + startPosition.latitude + + (newPosition.latitude - startPosition.latitude) * progress, + startPosition.longitude + + (newPosition.longitude - startPosition.longitude) * progress); + double intermediateHeading = + startHeading + (newHeading - startHeading) * progress; + + markers.removeWhere((m) => m.markerId == oldMarker.markerId); + markers.add(Marker( + markerId: oldMarker.markerId, + position: intermediatePosition, + rotation: intermediateHeading, + icon: icon, + )); + + update(); + }); + } + + double _calculateDistance(LatLng start, LatLng end) { + // Implement distance calculation (e.g., Haversine formula) + // For simplicity, this is a placeholder. Replace with actual implementation. + return 1000 * + sqrt(pow(start.latitude - end.latitude, 2) + + pow(start.longitude - end.longitude, 2)); + } + Future getTokenForParent() async { if (box.read(BoxName.sosPhonePassenger) == null) { Get.defaultDialog( @@ -1558,6 +1742,11 @@ class MapPassengerController extends GetxController { } } + Timer? _timer; + // final int updateIntervalMs = 100; // Update every 100ms + // final double minMovementThreshold = + // 1.0; // Minimum movement in meters to trigger update + void clearMarkersExceptStartEnd() { Set markersToRemove = markers .where((marker) => @@ -1567,39 +1756,72 @@ class MapPassengerController extends GetxController { for (Marker marker in markersToRemove) { markers.remove(marker); - update(); } + update(); } void reloadMarkerDriverCarsLocationToPassengerAfterApplied() { clearMarkersExceptStartEnd(); - // for (var i = 0; i < driverCarsLocationToPassengerAfterApplied.length; i++) { + LatLng driverPosition = LatLng( double.parse(datadriverCarsLocationToPassengerAfterApplied['message'][0] ['latitude']), double.parse(datadriverCarsLocationToPassengerAfterApplied['message'][0] ['longitude'])); - final driverAcceptedMarker = Marker( - markerId: const MarkerId('driverToPassengers'), - position: driverPosition, - rotation: double.parse( - datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['heading']), - icon: datadriverCarsLocationToPassengerAfterApplied['message'][0]['model'] - .contains('دراجة') - ? motoIcon - : datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['gender'] == - 'Male'.tr - ? carIcon - : ladyIcon, // Default to carIcon if gender is not Male or Female - ); - markers.add(driverAcceptedMarker); - // update(); - mapController?.animateCamera(CameraUpdate.newLatLng(driverPosition)); - update(); - // } // Update the map with the new markers + double heading = double.parse( + datadriverCarsLocationToPassengerAfterApplied['message'][0]['heading'] + .toString()); + + BitmapDescriptor icon = + datadriverCarsLocationToPassengerAfterApplied['message'][0]['model'] + .toString() + .contains('دراجة') + ? motoIcon + : datadriverCarsLocationToPassengerAfterApplied['message'][0] + ['gender'] == + 'Male'.tr + ? carIcon + : ladyIcon; + + _updateMarkerPosition(driverPosition, heading, icon); + } + + void _updateMarkerPosition( + LatLng newPosition, double newHeading, BitmapDescriptor icon) { + const String markerId = 'driverToPassengers'; + Marker? existingMarker = markers.cast().firstWhere( + (m) => m?.markerId == const MarkerId(markerId), + orElse: () => null, + ); + + if (existingMarker == null) { + // If the marker doesn't exist, create it at the new position + markers.add(Marker( + markerId: const MarkerId(markerId), + position: newPosition, + rotation: newHeading, + icon: icon, + )); + update(); + } else { + // If the marker exists, check if the movement is significant enough to update + double distance = + _calculateDistance(existingMarker.position, newPosition); + if (distance >= minMovementThreshold) { + _smoothlyUpdateMarker(existingMarker, newPosition, newHeading, icon); + } + } + + mapController?.animateCamera(CameraUpdate.newLatLng(newPosition)); + } + + @override + void onClose() { + _timer?.cancel(); + _animationTimers.forEach((_, timer) => timer.cancel()); + _animationTimers.clear(); + super.onClose(); } restCounter() { @@ -1907,9 +2129,11 @@ class MapPassengerController extends GetxController { size: const Size(30, 30), devicePixelRatio: Get.pixelRatio // scale: 1.0, ); - BitmapDescriptor.fromAssetImage(config, 'assets/images/picker.png', - mipmaps: false) - .then((value) { + BitmapDescriptor.asset( + config, + 'assets/images/picker.png', + // mipmaps: false, + ).then((value) { markerIcon = value; update(); }); @@ -1920,9 +2144,11 @@ class MapPassengerController 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', + // mipmaps: false, + ).then((value) { startIcon = value; update(); }); @@ -1931,9 +2157,11 @@ class MapPassengerController 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', + // mipmaps: false, + ).then((value) { endIcon = value; update(); }); @@ -1942,9 +2170,11 @@ class MapPassengerController extends GetxController { void addCustomCarIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); - BitmapDescriptor.fromAssetImage(config, 'assets/images/car.png', - mipmaps: false) - .then((value) { + BitmapDescriptor.asset( + config, + 'assets/images/car.png', + // mipmaps: false, + ).then((value) { carIcon = value; update(); }); @@ -1953,9 +2183,11 @@ class MapPassengerController extends GetxController { void addCustomMotoIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); - BitmapDescriptor.fromAssetImage(config, 'assets/images/moto1.png', - mipmaps: false) - .then((value) { + BitmapDescriptor.asset( + config, + 'assets/images/moto1.png', + // mipmaps: false, + ).then((value) { motoIcon = value; update(); }); @@ -1964,9 +2196,11 @@ class MapPassengerController extends GetxController { void addCustomLadyIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); - BitmapDescriptor.fromAssetImage(config, 'assets/images/lady1.png', - mipmaps: false) - .then((value) { + BitmapDescriptor.asset( + config, + 'assets/images/lady1.png', + // mipmaps: false, + ).then((value) { ladyIcon = value; update(); }); @@ -1975,9 +2209,11 @@ class MapPassengerController extends GetxController { void addCustomStepIcon() { ImageConfiguration config = ImageConfiguration( size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); - BitmapDescriptor.fromAssetImage(config, 'assets/images/brand.png', - mipmaps: false) - .then((value) { + BitmapDescriptor.asset( + config, + 'assets/images/brand.png', + // mipmaps: false, + ).then((value) { tripIcon = value; update(); }); @@ -2817,12 +3053,14 @@ class MapPassengerController extends GetxController { update(); } + List driversForMishwari = []; Future selectDriverAndCarForMishwariTrip() async { var res = await CRUD() .get(link: AppLink.selectDriverAndCarForMishwariTrip, payload: {}); if (res != 'failure') { var d = jsonDecode(res); - return d['message']; + driversForMishwari = d['message']; + update(); } else { return 'No driver available now try later time\nthanks for using our app' .tr; @@ -2839,14 +3077,10 @@ class MapPassengerController extends GetxController { // isBottomSheetShown = false; update(); // add dialoug for select driver and car - List driversForMishwari = await selectDriverAndCarForMishwariTrip(); + await selectDriverAndCarForMishwariTrip(); Future.delayed(Duration.zero); - Log.print('driversForMishwari: ${driversForMishwari}'); - Get.to(() => CupertinoDriverListWidget( - drivers: driversForMishwari, - )); - // add dialoug to select date and time + Get.to(() => CupertinoDriverListWidget()); // changeCashConfirmPageShown(); } @@ -2856,15 +3090,36 @@ class MapPassengerController extends GetxController { try { // Prepare trip data Map tripData = { - 'driver_id': driver['id'], - 'passenger_id': box.read(BoxName.passengerID), - 'trip_datetime': tripDateTime.toIso8601String(), - // Add other necessary trip details + 'id': driver['id'], + 'phone': driver['phone'], + 'gender': driver['gender'], + 'name': driver['name'], + 'name_english': driver['name_english'], + 'address': driver['address'], + 'religion': driver['religion'], + 'age': driver['age'], + 'education': driver['education'], + 'license_type': driver['license_type'], + 'national_number': driver['national_number'], + 'car_plate': driver['car_plate'], + 'make': driver['make'], + 'model': driver['model'], + 'year': driver['year'], + 'color': driver['color'], + 'color_hex': driver['color_hex'], + 'displacement': driver['displacement'], + 'fuel': driver['fuel'], + 'token': driver['token'], + 'rating': driver['rating'], + 'countRide': driver['countRide'], + 'passengerId': box.read(BoxName.passengerID), + 'timeSelected': tripDateTime.toIso8601String(), + 'status': 'pending', // Or other appropriate status }; // Send data to server var response = - await CRUD().post(link: AppLink.addAdminUser, payload: tripData); + await CRUD().post(link: AppLink.addMishwari, payload: tripData); if (response != 'failure') { // Trip saved successfully diff --git a/lib/controller/home/splash_screen_controlle.dart b/lib/controller/home/splash_screen_controlle.dart index 4814a08..d13edbc 100644 --- a/lib/controller/home/splash_screen_controlle.dart +++ b/lib/controller/home/splash_screen_controlle.dart @@ -5,7 +5,7 @@ import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:SEFER/views/auth/login_page.dart'; import 'package:package_info_plus/package_info_plus.dart'; -import 'package:uni_links/uni_links.dart'; +// import 'package:uni_links/uni_links.dart'; import '../../constant/box_name.dart'; import '../../main.dart'; @@ -32,27 +32,27 @@ class SplashScreenController extends GetxController } StreamSubscription? _sub; - Future initUniLinks() async { - // Handle initial URI if the app was launched from a link - try { - final initialUri = await getInitialUri(); - if (initialUri != null) { - handleLink(initialUri); - } - } on PlatformException { - // Handle exception by warning the user their action did not succeed - print("Failed to get initial uri"); - } + // Future initUniLinks() async { + // // Handle initial URI if the app was launched from a link + // try { + // final initialUri = await getInitialUri(); + // if (initialUri != null) { + // handleLink(initialUri); + // } + // } on PlatformException { + // // Handle exception by warning the user their action did not succeed + // print("Failed to get initial uri"); + // } - // Listen to new links while the app is running - _sub = uriLinkStream.listen((Uri? uri) { - if (uri != null) { - handleLink(uri); - } - }, onError: (Object err) { - print('Error occurred: $err'); - }); - } + // // Listen to new links while the app is running + // _sub = uriLinkStream.listen((Uri? uri) { + // if (uri != null) { + // handleLink(uri); + // } + // }, onError: (Object err) { + // print('Error occurred: $err'); + // }); + // } void handleLink(Uri uri) { if (uri.host == 'sefer.live' && uri.path == '/tripmonitor') { @@ -76,7 +76,7 @@ class SplashScreenController extends GetxController void onInit() async { super.onInit(); checkForUpdate(); - initUniLinks(); + // initUniLinks(); animationController = AnimationController( vsync: this, duration: const Duration(seconds: 4), diff --git a/lib/views/home/map_widget.dart/select_driver_mishwari.dart b/lib/views/home/map_widget.dart/select_driver_mishwari.dart index 1430745..117218e 100644 --- a/lib/views/home/map_widget.dart/select_driver_mishwari.dart +++ b/lib/views/home/map_widget.dart/select_driver_mishwari.dart @@ -3,16 +3,13 @@ import 'package:SEFER/controller/home/map_passenger_controller.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.dart'; import '../../../constant/api_key.dart'; class CupertinoDriverListWidget extends StatelessWidget { - final List drivers; - - const CupertinoDriverListWidget({super.key, required this.drivers}); - + MapPassengerController mapPassengerController = + Get.put(MapPassengerController()); @override Widget build(BuildContext context) { return CupertinoPageScaffold( @@ -21,10 +18,10 @@ class CupertinoDriverListWidget extends StatelessWidget { ), child: SafeArea( child: ListView.separated( - itemCount: drivers.length, + itemCount: mapPassengerController.driversForMishwari.length, separatorBuilder: (context, index) => const Divider(height: 1), itemBuilder: (context, index) { - var driver = drivers[index]; + var driver = mapPassengerController.driversForMishwari[index]; return Container( decoration: AppStyle.boxDecoration1, child: CupertinoListTile( @@ -137,7 +134,7 @@ class CupertinoDriverListWidget extends StatelessWidget { title: 'OK'.tr, onPressed: () { Get.back(); - showDateTimePickerDialog(); + showDateTimePickerDialog(driver); })); print('${'Selected driver'.tr}: ${driver['NAME']}'); // Get.back(); // Close the dialog @@ -186,13 +183,13 @@ class CupertinoDriverListWidget extends StatelessWidget { title: 'OK'.tr, onPressed: () { Get.back(); - showDateTimePickerDialog(); + showDateTimePickerDialog(driver); }, ), ); } - void showDateTimePickerDialog() { + void showDateTimePickerDialog(Map driver) { DateTime selectedDateTime = DateTime.now(); Get.defaultDialog( @@ -211,10 +208,10 @@ class CupertinoDriverListWidget extends StatelessWidget { title: 'Confirm Trip'.tr, onPressed: () async { DateTime selectedDateTime = - Get.find().selectedDateTime.value; + mapPassengerController.selectedDateTime.value; // Save trip data and set up notifications - // await Get.find().saveTripData(driver, selectedDateTime); Get.back(); + await mapPassengerController.saveTripData(driver, selectedDateTime); }, ), ); @@ -258,28 +255,3 @@ class DateTimePickerWidget extends StatelessWidget { ); } } - -// Future setLocalNotification(DateTime tripDateTime) async { -// FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = -// FlutterLocalNotificationsPlugin(); - -// var androidPlatformChannelSpecifics = const AndroidNotificationDetails( -// 'trip_reminder_channel', -// 'Trip Reminders', -// importance: Importance.max, -// priority: Priority.high, -// ); -// var iOSPlatformChannelSpecifics = IOSNotificationDetails(); -// var platformChannelSpecifics = NotificationDetails( -// android: androidPlatformChannelSpecifics, -// iOS: iOSPlatformChannelSpecifics, -// ); - -// await flutterLocalNotificationsPlugin.schedule( -// 0, -// 'Trip Reminder'.tr, -// 'Your trip is scheduled in 30 minutes'.tr, -// tripDateTime.subtract(const Duration(minutes: 30)), -// platformChannelSpecifics, -// ); -// }