This commit is contained in:
Hamza-Ayed
2024-11-20 20:24:49 +02:00
parent f796f4bc48
commit 231405ce9f
14 changed files with 725 additions and 351 deletions

View File

@@ -5,6 +5,7 @@ import 'dart:math' as math;
import 'dart:ui';
import 'package:SEFER/constant/univeries_polygon.dart';
import 'package:SEFER/controller/firebase/local_notification.dart';
import 'package:SEFER/views/widgets/mysnakbar.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_confetti/flutter_confetti.dart';
import 'package:vector_math/vector_math.dart' show radians, degrees;
@@ -42,6 +43,7 @@ import '../functions/crud.dart';
import '../functions/launch.dart';
import '../functions/secure_storage.dart';
import '../payment/payment_controller.dart';
import 'vip_waitting_page.dart';
class MapPassengerController extends GetxController {
bool isLoading = true;
@@ -3069,20 +3071,41 @@ class MapPassengerController extends GetxController {
}
Future getPlaces() async {
var languageCode;
// Check if `placeDestinationController.text` contains English characters
if (RegExp(r'[a-zA-Z]').hasMatch(placeDestinationController.text)) {
languageCode = 'en';
} else {
languageCode = 'ar';
}
var url =
// '${AppLink.googleMapsLink}place/nearbysearch/json?location=${mylocation.longitude}&radius=25000&language=ar&keyword=&key=${placeController.text}${AK.mapAPIKEY}';
'${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${placeDestinationController.text}&location=${passengerLocation.latitude},${passengerLocation.longitude}&radius=50000&language=ar&key=${AK.mapAPIKEY.toString()}';
'${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${placeDestinationController.text}&location=${passengerLocation.latitude},${passengerLocation.longitude}&radius=250000&language=$languageCode&key=${AK.mapAPIKEY.toString()}';
print(url);
var response = await CRUD().getGoogleApi(link: url, payload: {});
Log.print('response: ${response}');
placesDestination = response['results'];
update();
}
Future getPlacesStart() async {
var languageCode = wayPoint0Controller.text;
// Regular expression to check for English alphabet characters
final englishRegex = RegExp(r'[a-zA-Z]');
// Check if text contains English characters
if (englishRegex.hasMatch(languageCode)) {
languageCode = 'en';
} else {
languageCode = 'ar';
}
var url =
// '${AppLink.googleMapsLink}place/nearbysearch/json?location=${mylocation.longitude}&radius=25000&language=ar&keyword=&key=${placeController.text}${AK.mapAPIKEY}';
'${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${placeStartController.text}&location=${passengerLocation.latitude},${passengerLocation.longitude}&radius=50000&language=ar&key=${AK.mapAPIKEY.toString()}';
'${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${placeStartController.text}&location=${passengerLocation.latitude},${passengerLocation.longitude}&radius=250000&language=$languageCode&key=${AK.mapAPIKEY.toString()}';
var response = await CRUD().getGoogleApi(link: url, payload: {});
@@ -3091,15 +3114,45 @@ class MapPassengerController extends GetxController {
}
Future getPlacesListsWayPoint(int index) async {
var languageCode = wayPoint0Controller.text;
// Regular expression to check for English alphabet characters
final englishRegex = RegExp(r'[a-zA-Z]');
// Check if text contains English characters
if (englishRegex.hasMatch(languageCode)) {
languageCode = 'en';
} else {
languageCode = 'ar';
}
var url =
'${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${wayPoint0Controller.text}&location=${passengerLocation.latitude},${passengerLocation.longitude}&radius=50000&language=ar&key=${AK.mapAPIKEY.toString()}';
'${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${wayPoint0Controller.text}&location=${passengerLocation.latitude},${passengerLocation.longitude}&radius=250000&language=$languageCode&key=${AK.mapAPIKEY.toString()}';
var response = await CRUD().getGoogleApi(link: url, payload: {});
try {
var response = await CRUD().getGoogleApi(link: url, payload: {});
wayPoint0 = response['results'];
placeListResponseAll[index] = response['results'];
update();
if (response != null && response['results'] != null) {
wayPoint0 = response['results'];
placeListResponseAll[index] = response['results'];
update();
} else {
print('Error: Invalid response from Google Places API');
}
} catch (e) {
print('Error fetching places: $e');
}
}
// Future getPlacesListsWayPoint(int index) async {
// var url =
// '${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${wayPoint0Controller.text}&location=${passengerLocation.latitude},${passengerLocation.longitude}&radius=80000&language=${}&key=${AK.mapAPIKEY.toString()}';
// var response = await CRUD().getGoogleApi(link: url, payload: {});
// wayPoint0 = response['results'];
// placeListResponseAll[index] = response['results'];
// update();
// }
LatLng fromString(String location) {
List<String> parts = location.split(',');
@@ -3677,7 +3730,7 @@ class MapPassengerController extends GetxController {
isLoading = false;
update();
var url =
('${AppLink.googleMapsLink}directions/json?&language=ar&avoid=tolls|ferries&destination=$destination&origin=$origin&key=${AK.mapAPIKEY}');
('${AppLink.googleMapsLink}directions/json?&language=${box.read(BoxName.lang) ?? 'ar'}&avoid=tolls|ferries&destination=$destination&origin=$origin&key=${AK.mapAPIKEY}');
var response = await CRUD().getGoogleApi(link: url, payload: {});
data = response['routes'][0]['legs'];
@@ -4488,15 +4541,51 @@ class MapPassengerController extends GetxController {
}
List driversForMishwari = [];
Future selectDriverAndCarForMishwariTrip() async {
var res = await CRUD()
.get(link: AppLink.selectDriverAndCarForMishwariTrip, payload: {});
if (res != 'failure') {
var d = jsonDecode(res);
driversForMishwari = d['message'];
update();
} else {
return 'No driver available now try later time\nthanks for using our app'
// Calculate the bounds for 20km
double latitudeOffset = 0.1795; // 20km range in latitude
double longitudeOffset = 0.2074; // 20km range in longitude
// Calculate bounding box based on passenger's location
double southwestLat = passengerLocation.latitude - latitudeOffset;
double northeastLat = passengerLocation.latitude + latitudeOffset;
double southwestLon = passengerLocation.longitude - longitudeOffset;
double northeastLon = passengerLocation.longitude + longitudeOffset;
// Create the payload with calculated bounds
var payload = {
'southwestLat': southwestLat.toString(),
'northeastLat': northeastLat.toString(),
'southwestLon': southwestLon.toString(),
'northeastLon': northeastLon.toString(),
};
try {
// Fetch data from the API
var res = await CRUD().get(
link: AppLink.selectDriverAndCarForMishwariTrip, payload: payload);
if (res != 'failure') {
// Check if response is valid JSON
try {
var d = jsonDecode(res);
driversForMishwari = d['message'];
Log.print('driversForMishwari: ${driversForMishwari}');
update();
} catch (e) {
// Handle invalid JSON format
print("Error decoding JSON: $e");
return 'Server returned invalid data. Please try again later.';
}
} else {
return 'No driver available now, try again later. Thanks for using our app.'
.tr;
}
} catch (e) {
// Handle network or other exceptions
print("Error fetching data: $e");
return 'There was an issue connecting to the server. Please try again later.'
.tr;
}
}
@@ -4519,22 +4608,23 @@ class MapPassengerController extends GetxController {
// changeCashConfirmPageShown();
}
var driverIdVip = '';
Future<void> saveTripData(
Map<String, dynamic> driver, DateTime tripDateTime) async {
try {
// Prepare trip data
Map<String, dynamic> tripData = {
'id': driver['id'].toString(), // Ensure the id is a string
'id': driver['driver_id'].toString(), // Ensure the id is a string
'phone': driver['phone'],
'gender': driver['gender'],
'name': driver['NAME'],
'name_english': driver['name_english'],
'address': driver['address'],
'religion': driver['religion'],
'religion': driver['religion'] ?? 'UnKnown',
'age': driver['age'].toString(), // Convert age to String
'education': driver['education'],
'license_type': driver['license_type'],
'national_number': driver['national_number'],
'education': driver['education'] ?? 'UnKnown',
'license_type': driver['license_type'] ?? 'UnKnown',
'national_number': driver['national_number'] ?? 'UnKnown',
'car_plate': driver['car_plate'],
'make': driver['make'],
'model': driver['model'],
@@ -4546,12 +4636,12 @@ class MapPassengerController extends GetxController {
'token': driver['token'],
'rating': driver['rating'].toString(), // Convert rating to String
'countRide':
driver['countRide'].toString(), // Convert countRide to String
driver['ride_count'].toString(), // Convert countRide to String
'passengerId': box.read(BoxName.passengerID),
'timeSelected': tripDateTime.toIso8601String(),
'status': 'pending',
};
// Log.print('tripData: $tripData');
Log.print('tripData: $tripData');
// Send data to server
var response =
@@ -4560,33 +4650,52 @@ class MapPassengerController extends GetxController {
if (response != 'failure') {
// Trip saved successfully
Get.snackbar('Success'.tr, 'Trip booked successfully'.tr);
// Get.snackbar('Success'.tr, 'Trip booked successfully'.tr);
var id = response['message'].toString();
if (AppLink.endPoint != AppLink.seferCairoServer) {
await CRUD().post(
link: "${AppLink.endPoint}/ride/mishwari/add.php",
payload: tripData);
}
driverIdVip = driver['driver_id'];
DateTime timeSelected = DateTime.parse(tripDateTime.toIso8601String());
Get.find<NotificationController>().scheduleNotificationsForTimeSelected(
"Your trip is scheduled".tr,
"Don't forget your ride!".tr,
"tone1",
timeSelected);
// Optionally, set up local notification or send a push notification
// await setLocalNotification(tripDateTime);
await FirebaseMessagesController().sendNotificationToDriverMAP(
'OrderVIP',
rideId.toString(),
driver['token'].toString(),
[
id,
driver['id'],
passengerLocation.latitude.toString(),
passengerLocation.longitude.toString(),
box.read(BoxName.name).toString(),
box.read(BoxName.passengerID).toString(),
box.read(BoxName.phone).toString(),
box.read(BoxName.email).toString(),
box.read(BoxName.passengerPhotoUrl).toString(),
box.read(BoxName.tokenFCM).toString(),
driver['token'].toString(),
],
'order.wav');
// await FirebaseMessagesController().sendNotificationToDriverMAP(
// 'OrderVIP',
// rideId.toString(),
// driver['token'].toString(),
// [
// id,
// driver['id'],
// passengerLocation.latitude.toString(),
// passengerLocation.longitude.toString(),
// box.read(BoxName.name).toString(),
// box.read(BoxName.passengerID).toString(),
// box.read(BoxName.phone).toString(),
// box.read(BoxName.email).toString(),
// box.read(BoxName.passengerPhotoUrl).toString(),
// box.read(BoxName.tokenFCM).toString(),
// driver['token'].toString(),
// ],
// 'order.wav');
if (response['message'] == "Trip updated successfully") {
mySnackbarSuccess("Trip updated successfully".tr);
// FirebaseMessagesController().sendNotificationToDriverMAP(
// 'Order VIP Canceld'.tr,
// 'Passenger cancel order'.tr,
// token,
// [],
// 'cancel.wav',
// );
}
Get.to(() => const VipWaittingPage());
} else {
throw Exception('Failed to save trip');
}
@@ -4598,6 +4707,22 @@ class MapPassengerController extends GetxController {
}
}
cancelVip(String token, tripId) async {
// FirebaseMessagesController().sendNotificationToDriverMAP(
// 'Order VIP Canceld'.tr,
// 'Passenger cancel order'.tr,
// token,
// [],
// 'cancel.wav',
// );
var res = await CRUD()
.post(link: AppLink.cancelMishwari, payload: {'id': tripId});
if (res != 'failur') {
Get.back();
mySnackbarSuccess('You canceled VIP trip'.tr);
}
}
initilizeGetStorage() async {
if (box.read(BoxName.addWork) == null) {
box.write(BoxName.addWork, 'addWork');