diff --git a/.env b/.env
index bb4b7b6..79fab3d 100644
--- a/.env
+++ b/.env
@@ -14,7 +14,12 @@ chatGPTkeySeferNew=zg-Z4AJcAROgNXjgrEIU8fKC9XrxgUE4Qtrrlq1yiux0jL3dITSXrXlBl
secretKey=zg_ropj_57Iiv6MFCBFq3C2n6IXlmjykpxDmW93SW3vvXh68UA9T5FORTWgWsT37StKsOPdwDdsy8qR9srMUluahs3nPHvgBa33tGk90vV5XrXlBl
stripe_publishableKe=vg_ropj_57Iiv6MFCBFq3C2n6kNJnZByV6nuDtXe9IjEPOfhmpDtWmt3MLR0gQpiHcQmAFMUPrZc3QiCDjxBZLbxDC3efxWxz33bWH1ZgrsXrXlBl
llamaKey=RR-EuyoFDUvfRDBj46fZKAtKJ3voM8Mt768cPeJV7GNdAkPTKdY8Odm9n4ggGqI5GyoXrXlBl
-serverPHP=https://api.sefer.live/sefer
+serverPHP=https://sefer.click/sefer
+seferAlexandriaServer=https://seferalexandria.site/sefer
+seferPaymentServer=https://seferpayment.shop/sefer/ride
+seferCairoServer=https://sefer.click/sefer
+seferGizaServer=https://sefergiza.site/sefer
+# serverPHP=https://api.sefer.live/sefer
cohere=Aulwd8y5SPWos0hJhG0toUf8gOhUUrpf5Q2TPmVGXrXlBl
claudeAiAPI=zg-qbc-qvo39-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl
payPalClientId=QALymfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 17a2928..b24bdc6 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 34
- versionCode 54
- versionName '1.5.54'
+ versionCode 55
+ versionName '1.5.55'
// manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml']
}
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 4de00d5..ade4b34 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -37,11 +37,11 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 45
+ 47
CFBundleSignature
????
CFBundleVersion
- 4.3.45
+ 4.3.47
FirebaseAppDelegateProxyEnabled
NO
GMSApiKey
diff --git a/lib/constant/box_name.dart b/lib/constant/box_name.dart
index 0927bd1..450d1ba 100644
--- a/lib/constant/box_name.dart
+++ b/lib/constant/box_name.dart
@@ -5,6 +5,7 @@ class BoxName {
static const String tokenParent = "tokenParent";
static const String lang = "lang";
+ static const String serverChosen = "serverChosen";
static const String gender = "gender";
static const String carType = "carType";
static const String carPlate = "carPlate";
diff --git a/lib/constant/links.dart b/lib/constant/links.dart
index 0a5f06c..c144f13 100644
--- a/lib/constant/links.dart
+++ b/lib/constant/links.dart
@@ -1,7 +1,17 @@
+import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/env/env.dart';
+import 'package:SEFER/main.dart';
class AppLink {
- static final String server = Env.serverPHP;
+ // static final String seferPaymentServer = Env.seferPaymentServer;
+ static final String seferPaymentServer = '${Env.seferCairoServer}/ride';
+ static final String seferAlexandriaServer = Env.seferAlexandriaServer;
+ static final String seferCairoServer = Env.seferCairoServer;
+ static final String seferGizaServer = Env.seferGizaServer;
+
+ static final String endPoint = box.read(BoxName.serverChosen);
+ static final String server = endPoint;
+
static String googleMapsLink = 'https://maps.googleapis.com/maps/api/';
static String llama = 'https://api.llama-api.com/chat/completions';
static String gemini =
@@ -16,8 +26,8 @@ class AppLink {
static String packageInfo = "$server/auth/packageInfo.php";
//=======================Wallet===================
- static String wallet = '$server/ride/passengerWallet';
- static String walletDriver = '$server/ride/driverWallet';
+ static String wallet = '$seferPaymentServer/passengerWallet';
+ static String walletDriver = '$seferPaymentServer/driverWallet';
static String getAllPassengerTransaction =
"$wallet/getAllPassengerTransaction.php";
static String getWalletByPassenger = "$wallet/getWalletByPassenger.php";
@@ -25,8 +35,8 @@ class AppLink {
static String getPassengerWalletArchive =
"$wallet/getPassengerWalletArchive.php";
- static String addDrivePayment = "$ride/payment/add.php";
- static String addSeferWallet = "$ride/seferWallet/add.php";
+ static String addDrivePayment = "$seferPaymentServer/payment/add.php";
+ static String addSeferWallet = "$seferPaymentServer/seferWallet/add.php";
static String addPassengersWallet = "$wallet/add.php";
static String deletePassengersWallet = "$wallet/delete.php";
static String updatePassengersWallet = "$wallet/update.php";
@@ -47,19 +57,22 @@ class AppLink {
////=======================cancelRide===================
static String ride = '$server/ride';
- static String addCancelRideFromPassenger = "$server/ride/cancelRide/add.php";
- static String cancelRide = "$server/ride/cancelRide/get.php";
+ static String addCancelRideFromPassenger =
+ "$endPoint/ride/cancelRide/add.php";
+ static String cancelRide = "$endPoint/ride/cancelRide/get.php";
//-----------------ridessss------------------
static String addRides = "$ride/rides/add.php";
- static String getRides = "$ride/rides/get.php";
- static String getRideOrderID = "$ride/rides/getRideOrderID.php";
- static String getRideStatus = "$ride/rides/getRideStatus.php";
- static String getRideStatusBegin = "$ride/rides/getRideStatusBegin.php";
+ static String getRides = "$endPoint/ride/rides/get.php";
+ static String getRideOrderID = "$endPoint/ride/rides/getRideOrderID.php";
+ static String getRideStatus = "$endPoint/ride/rides/getRideStatus.php";
+ static String getRideStatusBegin =
+ "$endPoint/ride/rides/getRideStatusBegin.php";
static String getRideStatusFromStartApp =
"$ride/rides/getRideStatusFromStartApp.php";
- static String updateRides = "$ride/rides/update.php";
- static String updateStausFromSpeed = "$ride/rides/updateStausFromSpeed.php";
- static String deleteRides = "$ride/rides/delete.php";
+ static String updateRides = "$endPoint/ride/rides/update.php";
+ static String updateStausFromSpeed =
+ "$endPoint/ride/rides/updateStausFromSpeed.php";
+ static String deleteRides = "$endPoint/ride/rides/delete.php";
//-----------------DriverPayment------------------
static String adddriverScam = "$ride/driver_scam/add.php";
@@ -128,7 +141,7 @@ class AppLink {
static String updateLicense = "$ride/license/updateFeedBack.php";
//-----------------RegisrationCar------------------
static String addRegisrationCar = "$ride/RegisrationCar/add.php";
- static String getRegisrationCar = "$ride/RegisrationCar/get.php";
+ static String getRegisrationCar = "$endPoint/ride/RegisrationCar/get.php";
static String selectDriverAndCarForMishwariTrip =
"$ride/RegisrationCar/selectDriverAndCarForMishwariTrip.php";
static String updateRegisrationCar = "$ride/RegisrationCar/update.php";
@@ -169,7 +182,7 @@ class AppLink {
static String uploadEgypt = "$server/uploadEgypt.php";
//==================certifcate==========
- static String location = '$server/ride/location';
+ static String location = '$endPoint/ride/location';
static String getCarsLocationByPassenger = "$location/get.php";
static String addpassengerLocation = "$location/addpassengerLocation.php";
static String getCarsLocationByPassengerSpeed = "$location/getSpeed.php";
diff --git a/lib/controller/auth/register_controller.dart b/lib/controller/auth/register_controller.dart
index 6746b71..b9626bc 100644
--- a/lib/controller/auth/register_controller.dart
+++ b/lib/controller/auth/register_controller.dart
@@ -181,6 +181,14 @@ class RegisterController extends GetxController {
payload: payload,
);
if (res1 != 'failure') {
+ CRUD().post(
+ link: '${AppLink.seferAlexandriaServer}/auth/signup.php',
+ payload: payload,
+ );
+ CRUD().post(
+ link: '${AppLink.seferGizaServer}/auth/signup.php',
+ payload: payload,
+ );
box.write(BoxName.isVerified, '1');
box.write(BoxName.phone, '+2${phoneController.text}');
Get.offAll(const MapPagePassenger());
diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart
index 76cfd67..5e78c51 100644
--- a/lib/controller/firebase/firbase_messge.dart
+++ b/lib/controller/firebase/firbase_messge.dart
@@ -195,11 +195,7 @@ class FirebaseMessagesController extends GetxController {
onPressed: () async {
Get.back();
await Get.find()
- .getCarsLocationByPassengerAndReloadMarker(
- box.read(BoxName.carType), 7000);
-
- Get.find()
- .confirmRideForAllDriverAvailable();
+ .reSearchAfterCanceledFromDriver();
},
),
cancel: MyElevatedButton(
diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart
index ffe5a8c..8242270 100644
--- a/lib/controller/functions/crud.dart
+++ b/lib/controller/functions/crud.dart
@@ -28,9 +28,11 @@ class CRUD {
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}',
},
);
- print(response.request);
Log.print('payload: ${payload}');
- print(response.body);
+ Log.print('response.request: ${response.request}');
+ Log.print('response.reasonPhrase: ${response.reasonPhrase}');
+
+ Log.print('response.body: ${response.body}');
// print(payload);
// if (response.statusCode == 200) {
var jsonData = jsonDecode(response.body);
@@ -231,8 +233,10 @@ class CRUD {
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}',
},
);
- print(response.request);
- print(response.body);
+ Log.print('payload: ${payload}');
+ // print(response.request);
+ Log.print('response.request: ${response.request}');
+ Log.print('response.body: ${response.body}');
var jsonData = jsonDecode(response.body);
if (response.statusCode == 200) {
if (jsonData['status'] == 'success') {
diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart
index 866622d..19f3106 100644
--- a/lib/controller/home/map_passenger_controller.dart
+++ b/lib/controller/home/map_passenger_controller.dart
@@ -218,7 +218,7 @@ class MapPassengerController extends GetxController {
bool currentLocationToFormPlaces3 = false;
bool currentLocationToFormPlaces4 = false;
List currentLocationToFormPlacesAll = [];
- late String driverToken;
+ late String driverToken = '';
int carsOrder = 0;
int wayPointIndex = 0;
late double kazan;
@@ -559,7 +559,7 @@ class MapPassengerController extends GetxController {
remainingTimeToPassengerFromDriverAfterApplied =
timeToPassengerFromDriverAfterApplied - secondsElapsed;
- if (remainingTimeToPassengerFromDriverAfterApplied < 69) {
+ if (remainingTimeToPassengerFromDriverAfterApplied < 59) {
if (rideTimerBegin == false) {
rideTimerBegin = true;
}
@@ -1016,11 +1016,13 @@ class MapPassengerController extends GetxController {
late String make = '';
late String licensePlate = '';
confirmRideForFirstDriver() async {
- startCarLocationSearch(box.read(BoxName.carType));
- // await getCarsLocationByPassengerAndReloadMarker();
+ // startCarLocationSearch(box.read(BoxName.carType));
+ await getCarsLocationByPassengerAndReloadMarker(
+ box.read(BoxName.carType), 7000);
await getNearestDriverByPassengerLocationAPIGOOGLE();
- if (dataCarsLocationByPassenger != 'failure') {
+ if (dataCarsLocationByPassenger != 'failure' ||
+ dataCarsLocationByPassenger != null) {
driverToken =
dataCarsLocationByPassenger['message'][carsOrder]['token'].toString();
driverPhone =
@@ -1050,7 +1052,6 @@ class MapPassengerController extends GetxController {
isDriversTokensSend = false;
update();
-
await CRUD().post(link: AppLink.addRides, payload: {
"start_location": //'${data[0]['start_address']}',
'${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}',
@@ -1131,6 +1132,51 @@ class MapPassengerController extends GetxController {
Log.print(
'body: ${dataCarsLocationByPassenger['message'][carsOrder]['token']}');
});
+ CRUD().post(
+ link: '${AppLink.seferAlexandriaServer}/ride/rides/add.php',
+ payload: {
+ "start_location": //'${data[0]['start_address']}',
+ '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}',
+ "end_location": //'${data[0]['end_address']}',
+ '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}',
+ "date": DateTime.now().toString(),
+ "time": DateTime.now().toString(),
+ "endtime": durationToAdd.toString(),
+ "price": totalPassenger.toStringAsFixed(2),
+ "passenger_id": box.read(BoxName.passengerID).toString(),
+ "driver_id": dataCarsLocationByPassenger['message'][carsOrder]
+ ['driver_id']
+ .toString(),
+ "status": "waiting",
+ 'carType': box.read(BoxName.carType),
+ "price_for_driver": totalPassenger.toString(),
+ "price_for_passenger": totalME.toString(),
+ "distance": distance.toString(),
+ "paymentMethod": paymentController.isWalletChecked.toString(),
+ });
+ CRUD().post(
+ link: '${AppLink.seferGizaServer}/ride/rides/add.php',
+ payload: {
+ "start_location": //'${data[0]['start_address']}',
+ '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}',
+ "end_location": //'${data[0]['end_address']}',
+ '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}',
+ "date": DateTime.now().toString(),
+ "time": DateTime.now().toString(),
+ "endtime": durationToAdd.toString(),
+ "price": totalPassenger.toStringAsFixed(2),
+ "passenger_id": box.read(BoxName.passengerID).toString(),
+ "driver_id": dataCarsLocationByPassenger['message'][carsOrder]
+ ['driver_id']
+ .toString(),
+ "status": "waiting",
+ 'carType': box.read(BoxName.carType),
+ "price_for_driver": totalPassenger.toString(),
+ "price_for_passenger": totalME.toString(),
+ "distance": distance.toString(),
+ "paymentMethod": paymentController.isWalletChecked.toString(),
+ });
+
delayAndFetchRideStatus(rideId);
if (shouldFetch == false) {
startTimer();
@@ -1156,8 +1202,6 @@ class MapPassengerController extends GetxController {
bool isDriversTokensSend = false;
confirmRideForAllDriverAvailable() async {
- // isDriversTokensSend = true;
-
driversToken.remove(driverToken);
PaymentController paymentController = Get.find();
rideConfirm = true;
@@ -1206,6 +1250,7 @@ class MapPassengerController extends GetxController {
kazan.toStringAsFixed(0),
passengerRate.toStringAsFixed(2),
];
+ Log.print('body: ${body}');
for (var i = 1; i < driversToken.length; i++) {
FirebaseMessagesController().sendNotificationToDriverMapPolyline(
'OrderSpeed',
@@ -1255,8 +1300,8 @@ class MapPassengerController extends GetxController {
// }
tick++;
} else {
- timer
- .cancel(); // Stop the timer if remainingTimeToPassengerFromDriverAfterApplied <= 0
+ timer.cancel();
+ // Stop the timer if remainingTimeToPassengerFromDriverAfterApplied <= 0
}
} else {
timer.cancel(); // Stop the timer if shouldFetch is false
@@ -1269,124 +1314,132 @@ class MapPassengerController extends GetxController {
"No Captain Accepted Your Order".tr,
"We are looking for a captain but the price may increase to let a captain accept"
.tr,
- backgroundColor: AppColor.bronze,
+ backgroundColor: AppColor.yellowColor,
);
}
void delayAndFetchRideStatusForAllDriverAvailable(String rideId) async {
- startCarLocationSearch(box.read(BoxName.carType));
- int attemptCounter = 0;
const int maxAttempts = 15;
+ int attemptCounter = 0;
+ bool isApplied = false;
tick = 0;
Log.print('tick delayAndFetchRideStatusForAllDriverAvailable: ${tick}');
void fetchRideStatus() async {
- if (shouldFetch && attemptCounter < maxAttempts) {
+ if (attemptCounter < maxAttempts && !isApplied) {
attemptCounter++;
tick++;
var res = await getRideStatus(rideId);
if (res.toString() == 'Apply') {
getUpdatedRideForDriverApply(rideId);
-
- shouldFetch = false; // Stop further fetches
+ isApplied = true;
+ shouldFetch = false;
statusRide = 'Apply';
rideConfirm = false;
isSearchingWindow = false;
update();
startTimerFromDriverToPassengerAfterApplied();
- } else {
- Timer(const Duration(seconds: 2),
- fetchRideStatus); // Continue fetching for other statuses
- }
- } else {
- // Stop fetching after maxAttempts or if shouldFetch is false
- shouldFetch = false;
- MyDialog().getDialog('upgrade price'.tr,
- 'You can upgrade price to may driver accept your order'.tr, () {
- Get.back();
- Get.defaultDialog(
- barrierDismissible: false,
- title: "Increase Your Trip Fee (Optional)".tr,
- titleStyle: AppStyle.title,
- content: Column(
- children: [
- Text(
- "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers."
- .tr,
- style: AppStyle.title,
- textAlign: TextAlign.center,
- ),
- Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- IconButton(
- onPressed: () {
- increasFeeFromPassenger.text =
- (totalPassenger + 6).toStringAsFixed(1);
- // mapPassengerController.increasFeeFromPassenger.text =
- // mapPassengerController.totalPassenger
- // .toStringAsFixed(1);
- update();
- },
- icon: Column(
- children: [
- Text(
- '6',
- style: AppStyle.number,
- ),
- Container(
- decoration: const BoxDecoration(
- shape: BoxShape.circle,
- color: AppColor.greenColor),
- child: const Icon(
- Icons.arrow_circle_up,
- size: 30,
- color: AppColor.secondaryColor,
+ } else if (attemptCounter >= maxAttempts) {
+ shouldFetch = false;
+ // If the status is still not "Apply" after 15 attempts
+ MyDialog().getDialog('upgrade price'.tr,
+ 'You can upgrade price to may driver accept your order'.tr, () {
+ Get.back();
+ Get.defaultDialog(
+ barrierDismissible: false,
+ title: "Increase Your Trip Fee (Optional)".tr,
+ titleStyle: AppStyle.title,
+ content: Column(
+ children: [
+ Text(
+ "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers."
+ .tr,
+ style: AppStyle.title,
+ textAlign: TextAlign.center,
+ ),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ IconButton(
+ onPressed: () {
+ increasFeeFromPassenger.text =
+ (totalPassenger + 6).toStringAsFixed(1);
+ update();
+ },
+ icon: Column(
+ children: [
+ Text(
+ '6',
+ style: AppStyle.number,
),
- ),
- ],
+ Container(
+ decoration: const BoxDecoration(
+ shape: BoxShape.circle,
+ color: AppColor.greenColor),
+ child: const Icon(
+ Icons.arrow_circle_up,
+ size: 30,
+ color: AppColor.secondaryColor,
+ ),
+ ),
+ ],
+ ),
),
- ),
- SizedBox(
- width: 100,
- child: Form(
- key: increaseFeeFormKey,
- child: MyTextForm(
- controller: increasFeeFromPassenger,
- label: totalPassenger.toStringAsFixed(2),
- hint: totalPassenger.toStringAsFixed(2),
- type: TextInputType.number),
+ SizedBox(
+ width: 100,
+ child: Form(
+ key: increaseFeeFormKey,
+ child: MyTextForm(
+ controller: increasFeeFromPassenger,
+ label: totalPassenger.toStringAsFixed(2),
+ hint: totalPassenger.toStringAsFixed(2),
+ type: TextInputType.number),
+ ),
),
- ),
- ],
- )
+ ],
+ )
+ ],
+ ),
+ actions: [
+ MyElevatedButton(
+ title: "No, thanks",
+ onPressed: () {
+ Get.back();
+ cancelRide();
+ }),
+ MyElevatedButton(
+ title: "Increase Fee".tr,
+ kolor: AppColor.greenColor,
+ onPressed: () {
+ increaseFeeByPassengerAndReOrder();
+ })
],
- ),
- actions: [
- MyElevatedButton(
- title: "No, thanks",
- onPressed: () {
- Get.back();
- cancelRide();
- }),
- MyElevatedButton(
- title: "Increase Fee".tr,
- kolor: AppColor.greenColor,
- onPressed: () {
- increaseFeeByPassengerAndReOrder();
- })
- ],
- );
- });
- update();
- print('Stopped fetching ride status after 30 seconds.');
+ );
+ });
+ update();
+ print('Stopped fetching ride status after 15 attempts.');
+ } else {
+ Timer(const Duration(seconds: 2), fetchRideStatus);
+ }
}
}
fetchRideStatus(); // Initial call to start the process
}
+ reSearchAfterCanceledFromDriver() async {
+ await getCarsLocationByPassengerAndReloadMarker(
+ box.read(BoxName.carType), 7000);
+
+ confirmRideForAllDriverAvailable();
+ shouldFetch = true; // Stop further fetches
+ statusRide = 'wait';
+ rideConfirm = true;
+ isSearchingWindow = true;
+ update();
+ }
+
void start15SecondTimer(String rideId) {
Timer(const Duration(seconds: 15), () {
delayAndFetchRideStatusForAllDriverAvailable(rideId);
@@ -1581,7 +1634,7 @@ class MapPassengerController extends GetxController {
Log.print('searchInterval: ${searchInterval}');
int boundIncreaseStep = 2500; // Initial bounds in meters
Log.print('boundIncreaseStep: ${boundIncreaseStep}');
- int maxAttempts = 6; // Maximum attempts to increase bounds
+ int maxAttempts = 3; // Maximum attempts to increase bounds
int maxBoundIncreaseStep = 6000; // Maximum bounds increase step
int attempt = 0; // Current attempt
Log.print('initial attempt: ${attempt}');
@@ -1598,7 +1651,8 @@ class MapPassengerController extends GetxController {
}
return;
- } else {
+ } else if (reloadStartApp == true) {
+ Log.print('reloadStartApp: ${reloadStartApp}');
foundCars = await getCarsLocationByPassengerAndReloadMarker(
carType, boundIncreaseStep);
Log.print('foundCars: ${foundCars}');
@@ -1624,6 +1678,36 @@ class MapPassengerController extends GetxController {
});
}
+ String getLocationArea(double latitude, double longitude) {
+ // Giza Boundary Check
+ if (latitude >= 29.904975 &&
+ latitude <= 30.143372 &&
+ longitude >= 30.787030 &&
+ longitude <= 31.238843) {
+ box.write(BoxName.serverChosen, AppLink.seferGizaServer);
+ return 'Giza';
+ }
+ // Cairo Boundary Check
+ else if (latitude >= 29.918901 &&
+ latitude <= 30.198857 &&
+ longitude >= 31.215009 &&
+ longitude <= 31.532186) {
+ box.write(BoxName.serverChosen, AppLink.seferCairoServer);
+ return 'Cairo';
+ }
+ // Alexandria Boundary Check
+ else if (latitude >= 30.396286 &&
+ latitude <= 31.654458 &&
+ longitude >= 29.041139 &&
+ longitude <= 32.626259) {
+ box.write(BoxName.serverChosen, AppLink.seferAlexandriaServer);
+ return 'Alexandria';
+ }
+
+ // Return 'Unknown' if outside defined areas
+ return 'Unknown';
+ }
+
Future getCarsLocationByPassengerAndReloadMarker(
String carType, int boundIncreaseStep) async {
if (statusRide == 'wait') {
@@ -1631,6 +1715,7 @@ class MapPassengerController extends GetxController {
LatLngBounds bounds = calculateBounds(passengerLocation.latitude,
passengerLocation.longitude, boundIncreaseStep.toDouble());
var res;
+ // await getLocation();
switch (carType) {
case 'Lady':
@@ -1680,6 +1765,9 @@ class MapPassengerController extends GetxController {
}
if (res == 'failure') {
+ noCarString = true;
+ dataCarsLocationByPassenger = 'failure';
+ update();
return false;
} else {
noCarString = false;
@@ -1930,6 +2018,8 @@ class MapPassengerController extends GetxController {
}));
} else if (res1['status'] == 'success') {
var tokenParent = res1['data'][0]['token'];
+ Get.snackbar("The invitation was sent successfully".tr, '',
+ backgroundColor: AppColor.greenColor);
FirebaseMessagesController().sendNotificationToPassengerToken(
"Trip Monitoring".tr,
"Trip Monitoring".tr,
@@ -2029,9 +2119,14 @@ class MapPassengerController extends GetxController {
.toString());
BitmapDescriptor icon =
- datadriverCarsLocationToPassengerAfterApplied['message'][0]['model']
- .toString()
- .contains('دراجة')
+ datadriverCarsLocationToPassengerAfterApplied['message'][0]
+ ['model']
+ .toString()
+ .contains('دراجة') ||
+ datadriverCarsLocationToPassengerAfterApplied['message'][0]
+ ['make']
+ .toString()
+ .contains('دراجة')
? motoIcon
: datadriverCarsLocationToPassengerAfterApplied['message'][0]
['gender'] ==
@@ -2155,14 +2250,14 @@ class MapPassengerController extends GetxController {
clearPlacesDestination();
clearPolyline();
data = [];
- await CRUD().post(link: AppLink.updateDriverOrder, payload: {
- "order_id": rideId.toString(), // Convert to String
- "status": 'Cancel'
- });
- await CRUD().post(link: AppLink.updateRides, payload: {
- "id": rideId.toString(), // Convert to String
- "status": 'Cancel'
- });
+ // await CRUD().post(link: AppLink.updateDriverOrder, payload: {
+ // "order_id": rideId.toString(), // Convert to String
+ // "status": 'Cancel'
+ // });
+ // await CRUD().post(link: AppLink.updateRides, payload: {
+ // "id": rideId.toString(), // Convert to String
+ // "status": 'Cancel'
+ // });
Get.offAll(const MapPagePassenger());
}
}
@@ -2516,6 +2611,7 @@ class MapPassengerController extends GetxController {
(_locationData.latitude != null && _locationData.longitude != null
? LatLng(_locationData.latitude!, _locationData.longitude!)
: null)!;
+ getLocationArea(passengerLocation.latitude, passengerLocation.longitude);
newStartPointLocation = passengerLocation;
speed = _locationData.speed!;
// //print location details
@@ -2563,30 +2659,34 @@ class MapPassengerController extends GetxController {
// }
// });
// }
+ bool reloadStartApp = false;
startMarkerReloading() async {
+ Log.print('AppLink.endPoint: ${AppLink.endPoint}');
int reloadCount = 0;
+ if (reloadStartApp == false) {
+ Timer.periodic(const Duration(seconds: 5), (timer) async {
+ reloadCount++;
+ Log.print('reloadCount: ${reloadCount}');
- Timer.periodic(const Duration(seconds: 5), (timer) async {
- reloadCount++;
- Log.print('reloadCount: ${reloadCount}');
+ if (!rideConfirm) {
+ clearMarkersExceptStartEnd();
+ // _smoothlyUpdateMarker();
+ // startCarLocationSearch(box.read(BoxName.carType));
+ await getCarsLocationByPassengerAndReloadMarker(
+ box.read(BoxName.carType), 6000);
+ await getNearestDriverByPassengerLocation();
+ Log.print('reloadMarkers: from startMarkerReloading');
+ } else {
+ // runWhenRideIsBegin();
+ }
- if (!rideConfirm) {
- clearMarkersExceptStartEnd();
- // _smoothlyUpdateMarker();
- // startCarLocationSearch(box.read(BoxName.carType));
- await getCarsLocationByPassengerAndReloadMarker(
- box.read(BoxName.carType), 6000);
- await getNearestDriverByPassengerLocation();
- Log.print('reloadMarkers: from startMarkerReloadin');
- } else {
- // runWhenRideIsBegin();
- }
-
- if (reloadCount >= 10) {
- timer.cancel(); // Stop the timer after 5 reloads
- }
- });
+ if (reloadCount >= 6) {
+ reloadStartApp = true;
+ timer.cancel(); // Stop the timer after 5 reloads
+ }
+ });
+ }
}
String durationByPassenger = '';
@@ -2602,39 +2702,41 @@ class MapPassengerController extends GetxController {
}
if (!rideConfirm) {
if (dataCarsLocationByPassenger != 'failure') {
- if (dataCarsLocationByPassenger['message'].length > 0) {
- for (var i = 0;
- i < dataCarsLocationByPassenger['message'].length;
- i++) {
- var carLocation = dataCarsLocationByPassenger['message'][i];
+ if (dataCarsLocationByPassenger != null) {
+ if (dataCarsLocationByPassenger['message'].length > 0) {
+ for (var i = 0;
+ i < dataCarsLocationByPassenger['message'].length;
+ i++) {
+ var carLocation = dataCarsLocationByPassenger['message'][i];
- // Calculate the distance between the passenger's location and the current driver's location
- final distance = Geolocator.distanceBetween(
- passengerLocation.latitude,
- passengerLocation.longitude,
- double.parse(carLocation['latitude']),
- double.parse(carLocation['longitude']),
- );
- durationToPassenger = (distance * 25 * (1000 / 3600))
- .round(); //////35 is avg of speed in city
- // Update the UI with the distance and duration
- update();
-
- // If the distance is less than the nearest distance, update the nearest driver
- if (distance < nearestDistance) {
- nearestDistance = distance;
-
- nearestCar = CarLocation(
- distance: distance,
- duration:
- 0, // We don't have duration information from Geolocator
- id: carLocation['driver_id'],
- latitude: double.parse(carLocation['latitude']),
- longitude: double.parse(carLocation['longitude']),
+ // Calculate the distance between the passenger's location and the current driver's location
+ final distance = Geolocator.distanceBetween(
+ passengerLocation.latitude,
+ passengerLocation.longitude,
+ double.parse(carLocation['latitude']),
+ double.parse(carLocation['longitude']),
);
-
- // Update the UI with the nearest driver
+ durationToPassenger = (distance * 25 * (1000 / 3600))
+ .round(); //////35 is avg of speed in city
+ // Update the UI with the distance and duration
update();
+
+ // If the distance is less than the nearest distance, update the nearest driver
+ if (distance < nearestDistance) {
+ nearestDistance = distance;
+
+ nearestCar = CarLocation(
+ distance: distance,
+ duration:
+ 0, // We don't have duration information from Geolocator
+ id: carLocation['driver_id'],
+ latitude: double.parse(carLocation['latitude']),
+ longitude: double.parse(carLocation['longitude']),
+ );
+
+ // Update the UI with the nearest driver
+ update();
+ }
}
}
}
@@ -2665,7 +2767,7 @@ class MapPassengerController extends GetxController {
String apiUrl =
'${AppLink.googleMapsLink}distancematrix/json?destinations=${carLocation['latitude']},${carLocation['longitude']}&origins=${passengerLocation.latitude},${passengerLocation.longitude}&units=metric&key=${AK.mapAPIKEY}';
var response = await CRUD().getGoogleApi(link: apiUrl, payload: {});
- if (response['status'] == "OK") {
+ if (response != null && response['status'] == "OK") {
var data = response;
// Extract distance and duration from the response and handle accordingly
int distance1 =
@@ -2701,6 +2803,7 @@ class MapPassengerController extends GetxController {
// Handle the distance and duration as needed
else {
// 'Failed to retrieve distance and duration: ${response['status']}');
+ Log.print('${response['status']}: ${response['status']}}');
// Handle the failure case
}
}
@@ -2788,7 +2891,8 @@ class MapPassengerController extends GetxController {
isLoading = true;
update();
remainingTime = 25; //to make cancel every call
- startCarLocationSearch(box.read(BoxName.carType));
+ // startCarLocationSearch(box.read(BoxName.carType));
+ getCarsLocationByPassengerAndReloadMarker(box.read(BoxName.carType), 7000);
// await getCarsLocationByPassengerAndReloadMarker();
var coordDestination = destination.split(',');
double latPassengerDestination = double.parse(coordDestination[0]);
@@ -2992,7 +3096,9 @@ class MapPassengerController extends GetxController {
getMapPoints(String originSteps, String destinationSteps, int index) async {
isWayPointStopsSheetUtilGetMap = false;
// haveSteps = true;
- startCarLocationSearch(box.read(BoxName.carType));
+ // startCarLocationSearch(box.read(BoxName.carType));
+ await getCarsLocationByPassengerAndReloadMarker(
+ box.read(BoxName.carType), 7000);
// await getCarsLocationByPassengerAndReloadMarker();
// isLoading = true;
update();
@@ -3439,6 +3545,12 @@ class MapPassengerController extends GetxController {
}
}
+ void startFetchingData() {
+ Timer.periodic(Duration(milliseconds: 50), (Timer timer) async {
+ await getKazanPercent();
+ });
+ }
+
getPassengerRate() async {
var res = await CRUD().get(
link: AppLink.getPassengerRate,
@@ -3467,10 +3579,12 @@ class MapPassengerController extends GetxController {
addCustomStartIcon();
addCustomEndIcon();
await getLocation();
+
// await addToken();
- await getKazanPercent();
- await getPassengerRate();
- await getRideStatusFromStartApp();
+ getKazanPercent();
+ getPassengerRate();
+ getRideStatusFromStartApp();
+ reloadStartApp = false;
startMarkerReloading();
Get.put(TextToSpeechController());
box.write(BoxName.carType, 'yet');
diff --git a/lib/controller/home/profile/complaint_controller.dart b/lib/controller/home/profile/complaint_controller.dart
index f38f0ae..b3f774f 100644
--- a/lib/controller/home/profile/complaint_controller.dart
+++ b/lib/controller/home/profile/complaint_controller.dart
@@ -22,8 +22,8 @@ class ComplaintController extends GetxController {
'passengerId': box.read(BoxName.passengerID).toString(),
'feedBack': complaintController.text
});
- var d = jsonDecode(res);
- if (d['status'].toString() == 'success') {
+ // var d = jsonDecode(res);
+ if (res != 'failure') {
Get.defaultDialog(
title: 'Success'.tr,
titleStyle: AppStyle.title,
diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart
index 154eab4..31cfcc3 100644
--- a/lib/controller/local/translations.dart
+++ b/lib/controller/local/translations.dart
@@ -154,7 +154,9 @@ iOS [https://getapp.cc/app/6458734951]
"You have call from driver": " لديك مكالمة من السائق",
"Comfort": "كمفورت",
"Speed": "سبيد",
+ "The invitation was sent successfully": "تم إرسال الدعوة بنجاح",
"Lady": "ليدي",
+ "You should select your country": "يجب عليك اختيار بلدك",
"Delivery": "توصيل",
"Mashwari": "مشواري",
'The driver waiting you in picked location .':
diff --git a/lib/views/home/map_widget.dart/car_details_widget_to_go.dart b/lib/views/home/map_widget.dart/car_details_widget_to_go.dart
index 692471b..6054347 100644
--- a/lib/views/home/map_widget.dart/car_details_widget_to_go.dart
+++ b/lib/views/home/map_widget.dart/car_details_widget_to_go.dart
@@ -49,6 +49,11 @@ List carTypes = [
carDetail: 'Mashwari without end point'.tr,
image: 'assets/images/freeRide.png',
),
+ // CarType(
+ // carType: 'Family',
+ // carDetail: 'Family for 7 passenger'.tr,
+ // image: 'assets/images/Family.png',
+ // ),
];
class CarDetailsTypeToChoose extends StatelessWidget {
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 117218e..04dbccb 100644
--- a/lib/views/home/map_widget.dart/select_driver_mishwari.dart
+++ b/lib/views/home/map_widget.dart/select_driver_mishwari.dart
@@ -1,3 +1,4 @@
+import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/map_passenger_controller.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
@@ -84,8 +85,9 @@ class CupertinoDriverListWidget extends StatelessWidget {
width: 20,
height: 20,
decoration: BoxDecoration(
- color:
- hexToColor(driver['color_hex'].toString()),
+ color: hexToColor(
+ driver['color_hex'].toString()) ??
+ Colors.amber,
borderRadius: BorderRadius.circular(4),
border: Border.all(),
),
@@ -119,7 +121,8 @@ class CupertinoDriverListWidget extends StatelessWidget {
height: 20,
decoration: BoxDecoration(
color: hexToColor(
- driver['color_hex'].toString()),
+ driver['color_hex'].toString()) ??
+ AppColor.bronze,
borderRadius: BorderRadius.circular(4),
border: Border.all(),
),
diff --git a/lib/views/home/profile/passenger_profile_page.dart b/lib/views/home/profile/passenger_profile_page.dart
index 104b228..04e2083 100644
--- a/lib/views/home/profile/passenger_profile_page.dart
+++ b/lib/views/home/profile/passenger_profile_page.dart
@@ -378,8 +378,12 @@ class CountryPicker extends StatelessWidget {
box.write(
BoxName.countryCode, //
controller.selectedCountry); // Already saved in English
- Get.snackbar(controller.selectedCountry.toString().tr, '');
- Get.off(LoginPage());
+ if (controller.selectedCountry == null) {
+ Get.snackbar("You should select your country".tr, '');
+ } else {
+ Get.snackbar(controller.selectedCountry.toString().tr, '');
+ Get.off(LoginPage());
+ }
},
)
],