11/20/1
This commit is contained in:
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user