diff --git a/android/app/build.gradle b/android/app/build.gradle
index 15619f0..6c13091 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -148,8 +148,8 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdk = 23
targetSdk = flutter.targetSdkVersion
- versionCode = 71
- versionName = '1.5.71'
+ versionCode = 82
+ versionName = '1.5.82'
multiDexEnabled =true
// manifestPlaceholders can be specified here if needed
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 545d524..65245cb 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -1,6 +1,7 @@
My App
- default_channel
+
+ high_importance_channel
AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0
\ No newline at end of file
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index fccf2e6..9c0b524 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -37,11 +37,13 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 52
+ 59
CFBundleSignature
????
CFBundleVersion
- 4.3.52
+ 4.3.59
+ NSHumanReadableCopyright
+
FirebaseAppDelegateProxyEnabled
NO
GMSApiKey
diff --git a/lib/constant/box_name.dart b/lib/constant/box_name.dart
index c6dced8..7db29cd 100644
--- a/lib/constant/box_name.dart
+++ b/lib/constant/box_name.dart
@@ -10,9 +10,14 @@ class BoxName {
static const String carType = "carType";
static const String carPlate = "carPlate";
static const String packagInfo = "packagInfo";
- static const String isVerified = '0';
+ static const String isVerified = 'isVerified';
+ static const String isFirstTime = 'isFirstTime';
static const String statusDriverLocation = "statusDriverLocation";
+ static const String isTest = "isTest";
static const String password = "password";
+ static const String validity = "validity";
+ static const String promo = "promo";
+ static const String discount = "discount";
static const String arrivalTime = "arrivalTime";
static const String passwordDriver = "passwordDriver";
static const String agreeTerms = "agreeTerms";
@@ -25,6 +30,10 @@ class BoxName {
static const String sosPhoneDriver = "sosPhoneDriver";
static const String passengerID = "pasengerID";
static const String phone = "phone";
+ static const String package = "package";
+ static const String isInstall = "isInstall";
+ static const String isGiftToken = "isGiftToken";
+ static const String inviteCode = "inviteCode";
static const String phoneWallet = "phoneWallet";
static const String phoneDriver = "phoneDriver";
static const String dobDriver = "dobDriver";
diff --git a/lib/constant/links.dart b/lib/constant/links.dart
index a06a4c4..f8a36b7 100644
--- a/lib/constant/links.dart
+++ b/lib/constant/links.dart
@@ -59,21 +59,27 @@ class AppLink {
////=======================cancelRide===================
static String ride = '$server/ride';
static String addCancelRideFromPassenger =
- "$endPoint/ride/cancelRide/add.php";
- static String cancelRide = "$endPoint/ride/cancelRide/get.php";
+ "${box.read(BoxName.serverChosen)}/ride/cancelRide/add.php";
+ static String cancelRide =
+ "${box.read(BoxName.serverChosen)}/ride/cancelRide/get.php";
//-----------------ridessss------------------
static String addRides = "$ride/rides/add.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 getRides =
+ "${box.read(BoxName.serverChosen)}/ride/rides/get.php";
+ static String getRideOrderID =
+ "${box.read(BoxName.serverChosen)}/ride/rides/getRideOrderID.php";
+ static String getRideStatus =
+ "${box.read(BoxName.serverChosen)}/ride/rides/getRideStatus.php";
static String getRideStatusBegin =
- "$endPoint/ride/rides/getRideStatusBegin.php";
+ "${box.read(BoxName.serverChosen)}/ride/rides/getRideStatusBegin.php";
static String getRideStatusFromStartApp =
"$ride/rides/getRideStatusFromStartApp.php";
- static String updateRides = "$endPoint/ride/rides/update.php";
+ static String updateRides =
+ "${box.read(BoxName.serverChosen)}/ride/rides/update.php";
static String updateStausFromSpeed =
- "$endPoint/ride/rides/updateStausFromSpeed.php";
- static String deleteRides = "$endPoint/ride/rides/delete.php";
+ "${box.read(BoxName.serverChosen)}/ride/rides/updateStausFromSpeed.php";
+ static String deleteRides =
+ "${box.read(BoxName.serverChosen)}/ride/rides/delete.php";
//-----------------DriverPayment------------------
static String adddriverScam = "$ride/driver_scam/add.php";
@@ -105,8 +111,12 @@ class AppLink {
"$ride/notificationPassenger/update.php";
//-----------------Driver NotificationCaptain------------------
static String addNotificationCaptain = "$ride/notificationCaptain/add.php";
- static String addWaitingRide = "$ride/notificationCaptain/addWaitingRide.php";
- static String getRideWaiting = "$ride/notificationCaptain/getRideWaiting.php";
+ static String addWaitingRide =
+ "$endPoint/ride/notificationCaptain/addWaitingRide.php";
+ static String updateWaitingTrip =
+ "$endPoint/ride/notificationCaptain/updateWaitingTrip.php";
+ static String getRideWaiting =
+ "$endPoint/ride/notificationCaptain/getRideWaiting.php";
static String getNotificationCaptain = "$ride/notificationCaptain/get.php";
static String updateNotificationCaptain =
"$ride/notificationCaptain/update.php";
@@ -142,7 +152,8 @@ class AppLink {
static String updateLicense = "$ride/license/updateFeedBack.php";
//-----------------RegisrationCar------------------
static String addRegisrationCar = "$ride/RegisrationCar/add.php";
- static String getRegisrationCar = "$endPoint/ride/RegisrationCar/get.php";
+ static String getRegisrationCar =
+ "${box.read(BoxName.serverChosen)}/ride/RegisrationCar/get.php";
static String selectDriverAndCarForMishwariTrip =
"$ride/RegisrationCar/selectDriverAndCarForMishwariTrip.php";
static String updateRegisrationCar = "$ride/RegisrationCar/update.php";
@@ -183,7 +194,7 @@ class AppLink {
static String uploadEgypt = "$server/uploadEgypt.php";
//==================certifcate==========
- static String location = '$endPoint/ride/location';
+ static String location = '${box.read(BoxName.serverChosen)}/ride/location';
static String getCarsLocationByPassenger = "$location/get.php";
static String addpassengerLocation = "$location/addpassengerLocation.php";
static String getCarsLocationByPassengerSpeed = "$location/getSpeed.php";
@@ -241,7 +252,8 @@ class AppLink {
static String deletecaptainAccounr = "$authCaptin/deletecaptainAccounr.php";
static String updateAccountBank = "$authCaptin/updateAccountBank.php";
static String getAccount = "$authCaptin/getAccount.php";
-
+ static String updatePassengersInvitation =
+ "$server/ride/invitor/updatePassengersInvitation.php";
//===================Admin Captin============
static String getPassengerDetailsByPassengerID =
@@ -250,6 +262,7 @@ class AppLink {
static String getPassengerbyEmail = "$server/Admin/getPassengerbyEmail.php";
static String addAdminUser = "$server/Admin/adminUser/add.php";
static String getAdminUser = "$server/Admin/adminUser/get.php";
+ static String addError = "$server/Admin/errorApp.php";
static String getCaptainDetailsByEmailOrIDOrPhone =
"$server/Admin/AdminCaptain/getCaptainDetailsByEmailOrIDOrPhone.php";
static String getCaptainDetails = "$server/Admin/AdminCaptain/get.php";
diff --git a/lib/constant/univeries_polygon.dart b/lib/constant/univeries_polygon.dart
new file mode 100644
index 0000000..8358b9f
--- /dev/null
+++ b/lib/constant/univeries_polygon.dart
@@ -0,0 +1,83 @@
+import 'package:google_maps_flutter/google_maps_flutter.dart';
+
+class UniversitiesPolygons {
+ // AUC polygon points
+ static const List> universityPolygons = [
+ // AUC Polygon
+ [
+ LatLng(30.013431, 31.502572),
+ LatLng(30.018469, 31.497478),
+ LatLng(30.023158, 31.495870),
+ LatLng(30.025084, 31.496781),
+ LatLng(30.018701, 31.511393),
+ LatLng(30.015312, 31.508310),
+ ],
+ // Example polygon for University 'German University in Cairo (GUC)'
+ [
+ LatLng(29.984554, 31.437829),
+ LatLng(29.990363, 31.438390),
+ LatLng(29.990560, 31.445643),
+ LatLng(29.984436, 31.445825),
+ ],
+ //Future University in Egypt (FUE)
+ [
+ LatLng(30.025794, 31.490946),
+ LatLng(30.028341, 31.491014),
+ LatLng(30.028341, 31.492586),
+ LatLng(30.025844, 31.492491),
+ ],
+ //'British University in Egypt (BUE)'
+ [
+ LatLng(30.117423, 31.605834),
+ LatLng(30.118224, 31.605543),
+ LatLng(30.118649, 31.607361),
+ LatLng(30.118932, 31.608033),
+ LatLng(30.119592, 31.612159),
+ LatLng(30.119372, 31.612958),
+ LatLng(30.120017, 31.617102),
+ LatLng(30.119435, 31.617193),
+ ],
+ //Misr International University (MIU)
+ [
+ LatLng(30.166498, 31.491663),
+ LatLng(30.171956, 31.491060),
+ LatLng(30.172212, 31.495754),
+ LatLng(30.167112, 31.496108),
+ ],
+ // Canadian International College (CIC)
+ [
+ LatLng(30.034312, 31.428963),
+ LatLng(30.035661, 31.429037),
+ LatLng(30.036074, 31.430522),
+ LatLng(30.036017, 31.431146),
+ LatLng(30.034580, 31.431117),
+ ],
+ // October 6 University (O6U)
+ [
+ LatLng(29.974102, 30.946934),
+ LatLng(29.976620, 30.944925),
+ LatLng(29.979848, 30.949832),
+ LatLng(29.977372, 30.951950),
+ ],
+ [
+ LatLng(30.029312, 31.210046),
+ LatLng(30.027124, 31.201393),
+ LatLng(30.014523, 31.205087),
+ LatLng(30.015416, 31.212218),
+ LatLng(30.027325, 31.210661),
+ ],
+ // Add polygons for 8 more universities...
+ ];
+
+ static const List universityNames = [
+ "American University in Cairo (AUC)",
+ 'German University in Cairo (GUC)',
+ 'Future University in Egypt (FUE)',
+ 'British University in Egypt (BUE)',
+ 'Misr International University (MIU)',
+ 'Canadian International College (CIC)',
+ 'October 6 University (O6U)',
+ "Cairo University",
+ // Add names for 8 more universities...
+ ];
+}
diff --git a/lib/controller/auth/google_sign.dart b/lib/controller/auth/google_sign.dart
index b46f940..f02d2e6 100644
--- a/lib/controller/auth/google_sign.dart
+++ b/lib/controller/auth/google_sign.dart
@@ -1,10 +1,17 @@
+import 'dart:io';
+
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/controller/auth/login_controller.dart';
import 'package:SEFER/main.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:google_sign_in/google_sign_in.dart';
+import 'package:url_launcher/url_launcher.dart';
+import '../../constant/links.dart';
import '../../onbording_page.dart';
+import '../functions/crud.dart';
class GoogleSignInHelper {
static final GoogleSignIn _googleSignIn = GoogleSignIn(
@@ -32,26 +39,114 @@ class GoogleSignInHelper {
}
}
- static Future signInFromLogin() async {
+ Future signInFromLogin() async {
try {
final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
if (googleUser != null) {
await _handleSignUp(googleUser);
- // if (box.read(BoxName.countryCode) == 'Egypt') {
await Get.put(LoginController()).loginUsingCredentials(
box.read(BoxName.passengerID).toString(),
box.read(BoxName.email).toString(),
);
- // } else if (box.read(BoxName.countryCode) == 'Jordan') {
- // // Get.to(() => AiPage());
- // }
}
return googleUser;
} catch (error) {
+ // if (error is GoogleSignInAuthenticationException) {
+ // // Handle authentication errors from Google Sign-In
+ // addError("Google sign-in authentication error: ${error.message}",
+ // ' signInFromLogin()');
+ // } else if (error is GoogleSignInAccountNotFoundException) {
+ // // Handle the case where the user is not found (if applicable)
+ // addError("Google sign-in account not found error: ${error.message}",
+ // ' signInFromLogin()');
+ // }
+ // else
+ if (error is SocketException) {
+ // Handle network issues, like SSL certificate issues
+ addError("Network error (SSL certificate issue): ${error.message}",
+ ' signInFromLogin()');
+ } else if (error is PlatformException) {
+ // Handle platform-specific errors, like Google Play Services issues
+ if (error.code == 'sign_in_required') {
+ // Google Play Services are required but not installed or outdated
+ showGooglePlayServicesError();
+ } else {
+ addError("Platform error: ${error.message}",
+ ' signInFromLogin()');
+ }
+ } else {
+ // Catch all other unknown errors
+ addError("Unknown error: ${error.toString()}",
+ ' signInFromLogin()');
+ }
return null;
}
}
+ void showGooglePlayServicesError() async {
+ const playStoreUrl =
+ 'https://play.google.com/store/apps/details?id=com.google.android.gms&hl=en_US';
+
+ if (await canLaunchUrl(Uri.parse(playStoreUrl))) {
+ await launchUrl(Uri.parse(playStoreUrl));
+ } else {
+ // Fallback if the URL can't be opened
+ showDialog(
+ context: Get.context!,
+ builder: (BuildContext context) {
+ return AlertDialog(
+ title: Text('Error'.tr),
+ content: Text(
+ 'Could not open the Google Play Store. Please update Google Play Services manually.'
+ .tr),
+ actions: [
+ TextButton(
+ onPressed: () => Navigator.pop(context),
+ child: Text('Close'.tr),
+ ),
+ ],
+ );
+ },
+ );
+ }
+ }
+
+ // Future signInFromLogin() async {
+ // try {
+ // final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
+ // if (googleUser != null) {
+ // await _handleSignUp(googleUser);
+ // // if (box.read(BoxName.countryCode) == 'Egypt') {
+ // await Get.put(LoginController()).loginUsingCredentials(
+ // box.read(BoxName.passengerID).toString(),
+ // box.read(BoxName.email).toString(),
+ // );
+ // // } else if (box.read(BoxName.countryCode) == 'Jordan') {
+ // // // Get.to(() => AiPage());
+ // // }
+ // }
+ // return googleUser;
+ // } catch (error) {
+ // addError(error.toString(), ' signInFromLogin()');
+ // return null;
+ // }
+ // }
+
+ addError(String error, where) async {
+ CRUD().post(link: AppLink.addError, payload: {
+ 'error': error.toString(), // Example error description
+ 'userId': box.read(BoxName.driverID) ??
+ box.read(BoxName.passengerID), // Example user ID
+ 'userType': box.read(BoxName.driverID) != null
+ ? 'Driver'
+ : 'passenger', // Example user type
+ 'phone': box.read(BoxName.phone) ??
+ box.read(BoxName.phoneDriver), // Example phone number
+
+ 'device': where
+ });
+ }
+
// Method to handle Google Sign-Out
static Future signOut() async {
try {
diff --git a/lib/controller/auth/login_controller.dart b/lib/controller/auth/login_controller.dart
index b74a538..20aa194 100644
--- a/lib/controller/auth/login_controller.dart
+++ b/lib/controller/auth/login_controller.dart
@@ -1,9 +1,11 @@
import 'dart:convert';
+import 'dart:io';
import 'package:SEFER/constant/info.dart';
import 'package:SEFER/controller/firebase/firbase_messge.dart';
import 'package:SEFER/views/auth/login_page.dart';
import 'package:SEFER/views/auth/sms_verfy_page.dart';
+import 'package:SEFER/views/widgets/my_dialog.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart';
@@ -13,6 +15,8 @@ import 'package:SEFER/main.dart';
import 'package:SEFER/views/home/map_page_passenger.dart';
import 'package:location/location.dart';
+import '../functions/package_info.dart';
+
class LoginController extends GetxController {
final formKey = GlobalKey();
final formKeyAdmin = GlobalKey();
@@ -29,9 +33,20 @@ class LoginController extends GetxController {
update();
}
- getAppTester(String appPlatform) async {
- var res = await CRUD()
- .get(link: AppLink.getTesterApp, payload: {'appPlatform': appPlatform});
+ @override
+ void onInit() async {
+ box.read(BoxName.isTest) == null ||
+ box.read(BoxName.isTest).toString() == '0'
+ ? await getAppTester()
+ : null;
+
+ super.onInit();
+ }
+
+ getAppTester() async {
+ var res = await CRUD().get(
+ link: AppLink.getTesterApp,
+ payload: {'appPlatform': AppInformation.appName});
if (res != 'failure') {
var d = jsonDecode(res);
@@ -64,6 +79,8 @@ class LoginController extends GetxController {
await CRUD().get(link: AppLink.loginFromGooglePassenger, payload: {
'email': email,
'id': passengerID,
+ "platform": Platform.isAndroid ? 'android' : 'ios',
+ "appName": AppInformation.appName,
});
if (res == 'Failure') {
Get.offAll(SmsSignupEgypt());
@@ -79,6 +96,17 @@ class LoginController extends GetxController {
box.write(BoxName.isVerified, '1');
box.write(BoxName.email, jsonDecoeded['data'][0]['email']);
box.write(BoxName.phone, jsonDecoeded['data'][0]['phone']);
+ box.write(BoxName.isTest, '1');
+ box.write(BoxName.package, jsonDecoeded['data'][0]['package']);
+ box.write(BoxName.promo, jsonDecoeded['data'][0]['promo']);
+ box.write(BoxName.discount, jsonDecoeded['data'][0]['discount']);
+ box.write(BoxName.validity, jsonDecoeded['data'][0]['validity']);
+ box.write(BoxName.isInstall,
+ jsonDecoeded['data'][0]['isInstall'] ?? 'none');
+ box.write(BoxName.isGiftToken,
+ jsonDecoeded['data'][0]['isGiftToken'] ?? 'none');
+ box.write(BoxName.inviteCode,
+ jsonDecoeded['data'][0]['inviteCode'] ?? 'none');
var token = await CRUD().get(link: AppLink.getTokens, payload: {
'passengerID': box.read(BoxName.passengerID).toString()
@@ -94,10 +122,25 @@ class LoginController extends GetxController {
'cancel.wav',
);
Future.delayed(const Duration(seconds: 1));
- await CRUD().post(link: AppLink.addTokens, payload: {
- 'token': box.read(BoxName.tokenFCM),
- 'passengerID': box.read(BoxName.passengerID).toString()
- });
+ await CRUD().post(
+ link: "${AppLink.server}/ride/firebase/add.php",
+ payload: {
+ 'token': box.read(BoxName.tokenFCM),
+ 'passengerID': box.read(BoxName.passengerID).toString()
+ });
+ CRUD().post(
+ link:
+ "${AppLink.seferAlexandriaServer}/ride/firebase/add.php",
+ payload: {
+ 'token': box.read(BoxName.tokenFCM),
+ 'passengerID': box.read(BoxName.passengerID).toString()
+ });
+ CRUD().post(
+ link: "${AppLink.seferGizaServer}/ride/firebase/add.php",
+ payload: {
+ 'token': box.read(BoxName.tokenFCM),
+ 'passengerID': box.read(BoxName.passengerID).toString()
+ });
Get.defaultDialog(
title: 'Device Change Detected'.tr,
middleText:
@@ -111,8 +154,31 @@ class LoginController extends GetxController {
},
);
}
+ } // Logging to check if inviteCode is written correctly
+ print("Invite Code in Box: ${box.read(BoxName.inviteCode)}");
+ print("Is Install: ${box.read(BoxName.isInstall)}");
+
+ if (box.read(BoxName.inviteCode).toString() != 'none' &&
+ box.read(BoxName.isInstall).toString() != '1') {
+ await CRUD()
+ .post(link: AppLink.updatePassengersInvitation, payload: {
+ "inviteCode": box.read(BoxName.inviteCode).toString(),
+ "passengerID": box.read(BoxName.passengerID).toString(),
+ });
+ Get.defaultDialog(
+ title: 'Invitation Used'
+ .tr, // Automatically translates based on the current locale
+ middleText: "Your invite code was successfully applied!"
+ .tr, // Automatically translates based on the current locale
+ onConfirm: () {
+ Get.offAll(() =>
+ const MapPagePassenger()); // Navigate to MapPagePassenger after confirmation
+ },
+ textConfirm: "OK".tr, // Confirm button text
+ );
+ } else {
+ Get.offAll(() => const MapPagePassenger());
}
- Get.offAll(() => const MapPagePassenger());
} else {
Get.offAll(() => SmsSignupEgypt());
// Get.snackbar(jsonDecoeded['status'], jsonDecoeded['data'],
@@ -241,15 +307,4 @@ class LoginController extends GetxController {
}
update();
}
-
- @override
- void onInit() async {
- // permissionLocation = await Permission.locationWhenInUse.isGranted;
- await getAppTester(AppInformation.appName);
- // if (isTest == 0 && box.read(BoxName.passengerID) != null) {
- // await loginUsingCredentials(
- // box.read(BoxName.passengerID), box.read(BoxName.email));
- // }
- super.onInit();
- }
}
diff --git a/lib/controller/auth/register_controller.dart b/lib/controller/auth/register_controller.dart
index 7ff0d90..cb03dcc 100644
--- a/lib/controller/auth/register_controller.dart
+++ b/lib/controller/auth/register_controller.dart
@@ -3,6 +3,7 @@ import 'dart:convert';
import 'dart:math';
import 'package:SEFER/constant/colors.dart';
+import 'package:SEFER/controller/auth/login_controller.dart';
import 'package:SEFER/controller/local/phone_intel/phone_number.dart';
import 'package:SEFER/views/home/map_page_passenger.dart';
import 'package:SEFER/views/widgets/my_dialog.dart';
@@ -214,6 +215,8 @@ class RegisterController extends GetxController {
await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: {
'phone_number': phoneNumber,
'token': otp.toString(),
+ // 'urlImage': box.read(BoxName.passengerPhotoUrl),
+ // 'name': box.read(BoxName.name),
});
await controller.sendSmsEgypt(phoneNumber, otp.toString());
@@ -257,7 +260,7 @@ class RegisterController extends GetxController {
'password': 'unknown',
'gender': 'unknown',
'birthdate': '2002-01-01',
- 'site': 'unknown',
+ 'site': box.read(BoxName.passengerPhotoUrl) ?? 'unknown',
'first_name': box.read(BoxName.name).toString().split(' ')[0],
'last_name': box.read(BoxName.name).toString().split(' ')[1],
};
@@ -276,8 +279,13 @@ class RegisterController extends GetxController {
payload: payload,
);
box.write(BoxName.isVerified, '1');
+ box.write(BoxName.isFirstTime, '0');
box.write(BoxName.phone, phoneController.text);
- Get.offAll(const MapPagePassenger());
+ // Get.offAll(const MapPagePassenger());
+ Get.put(LoginController()).loginUsingCredentials(
+ box.read(BoxName.passengerID).toString(),
+ box.read(BoxName.email).toString(),
+ );
}
} else {
Get.snackbar(
diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart
index ebaba41..60ec7e2 100644
--- a/lib/controller/firebase/firbase_messge.dart
+++ b/lib/controller/firebase/firbase_messge.dart
@@ -1,12 +1,8 @@
import 'dart:convert';
import 'dart:io';
-import 'package:SEFER/env/env.dart';
-import 'package:SEFER/views/widgets/my_dialog.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:googleapis_auth/auth_io.dart';
-import 'package:googleapis_auth/googleapis_auth.dart';
import 'package:http/http.dart' as http;
import 'package:SEFER/controller/functions/toast.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
@@ -131,16 +127,22 @@ class FirebaseMessagesController extends GetxController {
Get.find().statusRide == 'Apply';
Get.find().isSearchingWindow == false;
Get.find().update();
- NotificationController().showNotification(
- 'Apply Order'.tr, 'Driver Applied the Ride for You'.tr, 'order1');
+ if (Platform.isAndroid) {
+ NotificationController().showNotification(
+ 'Apply Order'.tr, 'Driver Applied the Ride for You'.tr, 'order1');
+ }
// driverAppliedTripSnakBar();
} else if (message.notification!.title! == 'Promo'.tr) {
- NotificationController()
- .showNotification('Promo', 'Show latest promo'.tr, 'promo');
+ if (Platform.isAndroid) {
+ NotificationController()
+ .showNotification('Promo', 'Show latest promo'.tr, 'promo');
+ }
Get.to(const PromosPassengerPage());
} else if (message.notification!.title! == 'Trip Monitoring'.tr) {
- NotificationController()
- .showNotification('Trip Monitoring'.tr, '', 'iphone_ringtone');
+ if (Platform.isAndroid) {
+ NotificationController()
+ .showNotification('Trip Monitoring'.tr, '', 'iphone_ringtone');
+ }
var myListString = message.data['passengerList'];
var myList = jsonDecode(myListString) as List;
Get.toNamed('/tripmonitor', arguments: {
@@ -148,46 +150,59 @@ class FirebaseMessagesController extends GetxController {
'driverId': myList[1].toString(),
});
} else if (message.notification!.title! == 'token change'.tr) {
- NotificationController()
- .showNotification('token change'.tr, 'token change'.tr, 'cancel');
+ if (Platform.isAndroid) {
+ NotificationController()
+ .showNotification('token change'.tr, 'token change'.tr, 'cancel');
+ }
GoogleSignInHelper.signOut();
} else if (message.notification!.title! == 'DriverIsGoingToPassenger'.tr) {
Get.find().isDriverInPassengerWay = true;
Get.find().update();
- NotificationController().showNotification('Driver is Going To You'.tr,
- 'Please stay on the picked point.'.tr, 'tone1');
+ if (Platform.isAndroid) {
+ NotificationController().showNotification('Driver is Going To You'.tr,
+ 'Please stay on the picked point.'.tr, 'tone1');
+ }
// Get.snackbar('Driver is Going To Passenger', '',
// backgroundColor: AppColor.greenColor);
} else if (message.notification!.title! == 'message From passenger') {
- NotificationController()
- .showNotification('message From passenger'.tr, ''.tr, 'tone2');
+ if (Platform.isAndroid) {
+ NotificationController()
+ .showNotification('message From passenger'.tr, ''.tr, 'tone2');
+ }
passengerDialog(message.notification!.body!);
update();
} else if (message.notification!.title! == 'message From Driver') {
- NotificationController()
- .showNotification('message From passenger'.tr, ''.tr, 'tone2');
passengerDialog(message.notification!.body!);
+ if (Platform.isAndroid) {
+ NotificationController()
+ .showNotification('message From passenger'.tr, ''.tr, 'tone2');
+ }
update();
} else if (message.notification!.title! == 'RideIsBegin'.tr) {
Get.find().getBeginRideFromDriver();
// Get.snackbar('RideIsBegin', '', backgroundColor: AppColor.greenColor);
box.write(BoxName.passengerWalletTotal, '0');
- NotificationController()
- .showNotification('Trip is Begin'.tr, ''.tr, 'start');
update();
+ if (Platform.isAndroid) {
+ NotificationController()
+ .showNotification('Trip is Begin'.tr, ''.tr, 'start');
+ }
} else if (message.notification!.title! == 'Hi ,I will go now'.tr) {
// Get.snackbar('Hi ,I will go now', '',
// backgroundColor: AppColor.greenColor);
- NotificationController().showNotification(
- 'Passenger come to you'.tr, 'Hi ,I will go now'.tr, 'tone2');
+ if (Platform.isAndroid) {
+ NotificationController().showNotification(
+ 'Passenger come to you'.tr, 'Hi ,I will go now'.tr, 'tone2');
+ }
update();
} else if (message.notification!.title! == 'Hi ,I Arrive your site'.tr) {
- NotificationController()
- .showNotification('Hi ,I Arrive your site'.tr, ''.tr, 'tone2');
driverArrivePassengerDialoge();
-
+ if (Platform.isAndroid) {
+ NotificationController()
+ .showNotification('Hi ,I Arrive your site'.tr, ''.tr, 'tone2');
+ }
update();
} else if (message.notification!.title! == "Cancel Trip from driver".tr) {
Get.back();
@@ -214,10 +229,12 @@ class FirebaseMessagesController extends GetxController {
} else if (message.notification!.title! == 'Driver Finish Trip'.tr) {
var myListString = message.data['passengerList'];
var driverList = jsonDecode(myListString) as List;
- NotificationController().showNotification(
- 'Driver Finish Trip'.tr,
- 'you will pay to Driver'.tr + ' ${driverList[3].toString()} \$'.tr,
- 'tone1');
+ if (Platform.isAndroid) {
+ NotificationController().showNotification(
+ 'Driver Finish Trip'.tr,
+ 'you will pay to Driver'.tr + ' ${driverList[3].toString()} \$'.tr,
+ 'tone1');
+ }
Get.find().stopRecording();
if (double.parse(box.read(BoxName.passengerWalletTotal)) < 0) {
box.write(BoxName.passengerWalletTotal, 0);
@@ -249,11 +266,13 @@ class FirebaseMessagesController extends GetxController {
var myListString = message.data['passengerList'];
var driverList = jsonDecode(myListString) as List;
// if (Platform.isAndroid) {
- NotificationController().showNotification(
- 'Call Income'.tr,
- message.notification!.body!,
- 'iphone_ringtone',
- );
+ if (Platform.isAndroid) {
+ NotificationController().showNotification(
+ 'Call Income'.tr,
+ message.notification!.body!,
+ 'iphone_ringtone',
+ );
+ }
// }
// Assuming GetMaterialApp is initialized and context is valid for navigation
// Get.to(() => PassengerCallPage(
@@ -267,12 +286,13 @@ class FirebaseMessagesController extends GetxController {
var myListString = message.data['passengerList'];
var driverList = jsonDecode(myListString) as List;
// if (Platform.isAndroid) {
- NotificationController().showNotification(
- 'Call Income'.tr,
- message.notification!.body!,
- 'iphone_ringtone',
- );
- // }
+ if (Platform.isAndroid) {
+ NotificationController().showNotification(
+ 'Call Income'.tr,
+ message.notification!.body!,
+ 'iphone_ringtone',
+ );
+ }
// Assuming GetMaterialApp is initialized and context is valid for navigation
// Get.to(() => PassengerCallPage(
// channelName: driverList[1].toString(),
@@ -325,11 +345,13 @@ class FirebaseMessagesController extends GetxController {
// }
else if (message.notification!.title! == 'Order Applied'.tr) {
- NotificationController().showNotification(
- 'The order Accepted by another Driver'.tr,
- 'We regret to inform you that another driver has accepted this order.'
- .tr,
- 'order');
+ if (Platform.isAndroid) {
+ NotificationController().showNotification(
+ 'The order Accepted by another Driver'.tr,
+ 'We regret to inform you that another driver has accepted this order.'
+ .tr,
+ 'order');
+ }
}
}
@@ -645,7 +667,7 @@ class FirebaseMessagesController extends GetxController {
if (response.statusCode == 200) {
print(
'Notification sent successfully. Status code: ${response.statusCode}');
- print('Response body: ${response.body}');
+ print('Response token: ${token}');
} else {
print(
'Failed to send notification. Status code: ${response.statusCode}');
@@ -696,8 +718,9 @@ class FirebaseMessagesController extends GetxController {
// }
// }
- Future sendNotificationToDriverMAP(String title, String body,
- String token, List data, String tone) async {
+ Future sendNotificationToDriverMAP(
+ String title, String body, String token, List data, String tone,
+ {int retryCount = 2}) async {
try {
String serviceAccountKeyJson = '''{
"type": "service_account",
@@ -719,7 +742,7 @@ class FirebaseMessagesController extends GetxController {
// Obtain an OAuth 2.0 access token
final accessToken = await accessTokenManager.getAccessToken();
- Log.print('accessToken: ${accessToken}');
+ // Log.print('accessToken: ${accessToken}');
// Send the notification
final response = await http.post(
@@ -762,14 +785,28 @@ class FirebaseMessagesController extends GetxController {
if (response.statusCode == 200) {
print(
'Notification sent successfully. Status code: ${response.statusCode}');
- print('Response body: ${response.body}');
+ print('Response token: ${token}');
} else {
print(
'Failed to send notification. Status code: ${response.statusCode}');
print('Response body: ${response.body}');
+ if (retryCount > 0) {
+ print('Retrying... Attempts remaining: $retryCount');
+ await Future.delayed(
+ Duration(seconds: 2)); // Optional delay before retrying
+ return sendNotificationToDriverMAP(title, body, token, data, tone,
+ retryCount: retryCount - 1);
+ }
}
} catch (e) {
print('Error sending notification: $e');
+ if (retryCount > 0) {
+ print('Retrying... Attempts remaining: $retryCount');
+ await Future.delayed(
+ Duration(seconds: 2)); // Optional delay before retrying
+ return sendNotificationToDriverMAP(title, body, token, data, tone,
+ retryCount: retryCount - 1);
+ }
}
}
diff --git a/lib/controller/firebase/local_notification.dart b/lib/controller/firebase/local_notification.dart
index d98b6db..5fc0484 100644
--- a/lib/controller/firebase/local_notification.dart
+++ b/lib/controller/firebase/local_notification.dart
@@ -17,7 +17,7 @@ class NotificationController extends GetxController {
// Displays a notification with the given title and message
void showNotification(String title, String message, String tone) async {
AndroidNotificationDetails android = AndroidNotificationDetails(
- 'your channel id', 'your channel name',
+ 'high_importance_channel', 'High Importance Notifications',
importance: Importance.max,
priority: Priority.high,
showWhen: false,
diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart
index c642116..1525659 100644
--- a/lib/controller/functions/crud.dart
+++ b/lib/controller/functions/crud.dart
@@ -109,7 +109,7 @@ class CRUD {
print(await response.stream.bytesToString());
Get.defaultDialog(
title: 'You will receive a code in WhatsApp Messenger'.tr,
- middleText: '',
+ middleText: 'wait 1 minute to recive message'.tr,
confirm: MyElevatedButton(
title: 'OK'.tr,
onPressed: () {
diff --git a/lib/controller/functions/package_info.dart b/lib/controller/functions/package_info.dart
index ca4933b..bfcef9c 100644
--- a/lib/controller/functions/package_info.dart
+++ b/lib/controller/functions/package_info.dart
@@ -3,7 +3,6 @@ import 'dart:io';
import 'package:SEFER/constant/links.dart';
import 'package:SEFER/controller/functions/crud.dart';
import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:url_launcher/url_launcher.dart';
@@ -17,7 +16,7 @@ Future checkForUpdate(BuildContext context) async {
final version = packageInfo.version;
print('currentVersion is : $currentVersion');
// Fetch the latest version from your server
- String latestVersion = await getPackageInfo();
+ String latestVersion = box.read(BoxName.package);
box.write(BoxName.packagInfo, version);
if (latestVersion.isNotEmpty && latestVersion != currentVersion) {
@@ -25,18 +24,22 @@ Future checkForUpdate(BuildContext context) async {
}
}
-Future getPackageInfo() async {
- final response = await CRUD().get(link: AppLink.packageInfo, payload: {
- "platform": Platform.isAndroid ? 'android' : 'ios',
- "appName": AppInformation.appName,
- });
-
- if (response != 'failure') {
- return jsonDecode(response)['message'][0]['version'];
- }
- return '';
+checkForBounusInvitation() {
+ if (box.read(BoxName.inviteCode) != null) {}
}
+// Future getPackageInfo() async {
+// final response = await CRUD().get(link: AppLink.packageInfo, payload: {
+// "platform": Platform.isAndroid ? 'android' : 'ios',
+// "appName": AppInformation.appName,
+// });
+
+// if (response != 'failure') {
+// return jsonDecode(response)['message'][0]['version'];
+// }
+// return '';
+// }
+
void showUpdateDialog(BuildContext context) {
final String storeUrl = Platform.isAndroid
? 'https://play.google.com/store/apps/details?id=com.mobileapp.store.ride'
diff --git a/lib/controller/home/blinking_promo_controller.dart.dart b/lib/controller/home/blinking_promo_controller.dart.dart
new file mode 100644
index 0000000..df0bc82
--- /dev/null
+++ b/lib/controller/home/blinking_promo_controller.dart.dart
@@ -0,0 +1,91 @@
+import 'dart:async';
+import 'dart:convert';
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+
+import '../../constant/links.dart';
+import '../../views/widgets/elevated_btn.dart';
+import '../functions/crud.dart';
+
+class BlinkingController extends GetxController {
+ final promoFormKey = GlobalKey();
+
+ final promo = TextEditingController();
+ bool promoTaken = false;
+ void applyPromoCodeToPassenger() async {
+ //TAWJIHI
+ if (promoFormKey.currentState!.validate()) {
+ CRUD().get(link: AppLink.getPassengersPromo, payload: {
+ 'promo_code': promo.text,
+ }).then((value) {
+ if (value == 'failure') {
+ Get.defaultDialog(
+ title: 'Promo End !'.tr,
+ confirm: MyElevatedButton(
+ title: 'Back',
+ onPressed: () {
+ Get.back();
+ Get.back();
+ },
+ ));
+ }
+ var decode = jsonDecode(value);
+
+ // if (decode["status"] == "success") {
+ // var firstElement = decode["message"][0];
+ // if (double.parse(box.read(BoxName.passengerWalletTotal)) < 0) {
+ // totalPassenger = totalCostPassenger -
+ // (totalCostPassenger * int.parse(firstElement['amount']) / 100);
+ // update();
+ // } else {
+ // totalPassenger = totalCostPassenger -
+ // (totalCostPassenger * int.parse(firstElement['amount']) / 100);
+ // update();
+ // }
+
+ // totalDriver = totalDriver -
+ // (totalDriver * int.parse(firstElement['amount']) / 100);
+ // promoTaken = true;
+ // update();
+ // Get.back();
+ // }
+ });
+ }
+ }
+
+ // Reactive variable for blinking (on/off)
+ var isLightOn = false.obs;
+
+ // To animate the border color
+ var borderColor = Colors.black.obs;
+
+ Timer? _blinkingTimer;
+
+ // Method to start blinking for 5 seconds
+ void startBlinking() {
+ int count = 0;
+
+ _blinkingTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
+ // Toggle light on/off
+ isLightOn.value = !isLightOn.value;
+ borderColor.value = isLightOn.value
+ ? Colors.yellow
+ : Colors.black; // Animate border color
+
+ count++;
+
+ // Stop blinking after 5 seconds
+ if (count >= 35) {
+ timer.cancel();
+ isLightOn.value = false; // Ensure light turns off
+ borderColor.value = Colors.black; // Reset the border color
+ }
+ });
+ }
+
+ @override
+ void onClose() {
+ _blinkingTimer?.cancel();
+ super.onClose();
+ }
+}
diff --git a/lib/controller/home/contact_us_controller.dart b/lib/controller/home/contact_us_controller.dart
new file mode 100644
index 0000000..afc879f
--- /dev/null
+++ b/lib/controller/home/contact_us_controller.dart
@@ -0,0 +1,78 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_font_icons/flutter_font_icons.dart';
+import 'package:get/get.dart';
+
+import '../../../constant/colors.dart';
+import '../functions/launch.dart';
+
+class ContactUsController extends GetxController {
+ final String phone1 = '+201018805430';
+ final String phone2 = '+201080182934';
+ final TimeOfDay workStartTime = const TimeOfDay(hour: 12, minute: 0);
+ final TimeOfDay workEndTime = const TimeOfDay(hour: 19, minute: 0);
+
+ bool _isWithinWorkTime(TimeOfDay now) {
+ return (now.hour > workStartTime.hour ||
+ (now.hour == workStartTime.hour &&
+ now.minute >= workStartTime.minute)) &&
+ (now.hour < workEndTime.hour ||
+ (now.hour == workEndTime.hour && now.minute <= workEndTime.minute));
+ }
+
+ void showContactDialog(BuildContext context) {
+ TimeOfDay now = TimeOfDay.now();
+
+ showCupertinoModalPopup(
+ context: context,
+ builder: (context) => CupertinoActionSheet(
+ title: Text('Contact Us'.tr),
+ message: Text('Choose a contact option'.tr),
+ actions: [
+ if (_isWithinWorkTime(now))
+ CupertinoActionSheetAction(
+ child: Text(phone1),
+ onPressed: () => makePhoneCall(
+ phone1,
+ ),
+ ),
+ if (_isWithinWorkTime(now))
+ CupertinoActionSheetAction(
+ child: Text(phone2),
+ onPressed: () => makePhoneCall(phone2),
+ ),
+ if (!_isWithinWorkTime(now))
+ CupertinoActionSheetAction(
+ child: Text(
+ 'Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.'
+ .tr),
+ onPressed: () => Navigator.pop(context),
+ ),
+ CupertinoActionSheetAction(
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceAround,
+ children: [
+ const Icon(
+ FontAwesome.whatsapp,
+ color: AppColor.greenColor,
+ ),
+ Text('Send WhatsApp Message'.tr),
+ ],
+ ),
+ onPressed: () =>
+ launchCommunication('whatsapp', phone1, 'Hello'.tr),
+ ),
+ CupertinoActionSheetAction(
+ child: Text('Send Email'.tr),
+ onPressed: () =>
+ launchCommunication('email', 'support@sefer.live', 'Hello'.tr),
+ ),
+ ],
+ cancelButton: CupertinoActionSheetAction(
+ child: Text('Cancel'.tr),
+ onPressed: () => Navigator.pop(context),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart
index ae93a0c..35a3da5 100644
--- a/lib/controller/home/map_passenger_controller.dart
+++ b/lib/controller/home/map_passenger_controller.dart
@@ -2,6 +2,8 @@ import 'dart:async';
import 'dart:convert';
import 'dart:math' show Random, cos, pi, pow, sin, sqrt;
import 'dart:math' as math;
+import 'package:SEFER/constant/univeries_polygon.dart';
+import 'package:flutter_confetti/flutter_confetti.dart';
import 'package:vector_math/vector_math.dart' show radians, degrees;
import 'package:SEFER/controller/functions/tts.dart';
@@ -26,6 +28,7 @@ import '../../constant/links.dart';
import '../../constant/table_names.dart';
import '../../main.dart';
import '../../models/model/locations.dart';
+import '../../models/model/painter_copoun.dart';
import '../../print.dart';
import '../../views/home/map_widget.dart/car_details_widget_to_go.dart';
import '../../views/home/map_widget.dart/select_driver_mishwari.dart';
@@ -51,6 +54,7 @@ class MapPassengerController extends GetxController {
TextEditingController whatsAppLocationText = TextEditingController();
TextEditingController messageToDriver = TextEditingController();
final sosFormKey = GlobalKey();
+ final promoFormKey = GlobalKey();
final messagesFormKey = GlobalKey();
final increaseFeeFormKey = GlobalKey();
List data = [];
@@ -362,9 +366,15 @@ class MapPassengerController extends GetxController {
"id": rideId.toString(), // Convert to String
"status": 'waiting'
});
+ CRUD().post(link: AppLink.updateWaitingTrip, payload: {
+ "id": rideId.toString(), // Convert to String
+ "status": 'wait'
+ });
tick = 0;
}
- confirmRideForAllDriverAvailable();
+ await getCarForFirstConfirm(box.read(BoxName.carType));
+ // confirmRideForAllDriverAvailable();
+ icreaseForSameRideAndDelay();
}
}
}
@@ -734,7 +744,7 @@ class MapPassengerController extends GetxController {
if (res != 'failure') {
var decode = jsonDecode(res);
- if (decode['data']['status'] == 'Begin') {
+ if (decode['data']['status'] != 'Apply') {
timeToPassengerFromDriverAfterApplied = 0;
remainingTime = 0;
remainingTimeToPassengerFromDriverAfterApplied = 0;
@@ -747,7 +757,7 @@ class MapPassengerController extends GetxController {
// isCancelRidePageShown = true;
rideIsBeginPassengerTimer();
runWhenRideIsBegin();
- }
+ } else {}
}
} catch (e) {
// Handle the error or perform any necessary actions
@@ -921,7 +931,7 @@ class MapPassengerController extends GetxController {
// 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.');
+ throw const FormatException('No URL found in the provided link.');
}
// Extract the URL and clean it
@@ -1016,44 +1026,69 @@ class MapPassengerController extends GetxController {
late String model = '';
late String make = '';
late String licensePlate = '';
+
confirmRideForFirstDriver() async {
// startCarLocationSearch(box.read(BoxName.carType));
// await getCarsLocationByPassengerAndReloadMarker(
- // box.read(BoxName.carType), 7000);
- // await getNearestDriverByPassengerLocationAPIGOOGLE();
- Log.print('dataCarsLocationByPassenger: ${dataCarsLocationByPassenger}');
+ // box.read(BoxName.carType), 7000);
+ // var nearestCar = await getNearestDriverByPassengerLocation();
+
+ // if (nearestCar != null) {
+ // // Find the corresponding driver data in dataCarsLocationByPassenger
+ // var nearestDriverData = dataCarsLocationByPassenger['message'].firstWhere(
+ // (car) => car['driver_id'] == nearestCar.id,
+ // orElse: () => null,
+ // );
+
+ // // if (nearestDriverData != null) {
+ // driverToken = nearestDriverData['token'].toString();
+ // Log.print('driverToken: ${driverToken}');
+ // driverPhone = nearestDriverData['phone'].toString();
+ // firstName = nearestDriverData['first_name'].toString();
+ // carColor = nearestDriverData['color'].toString();
+ // driverRate = nearestDriverData['ratingDriver'].toString();
+ // carYear = nearestDriverData['year'].toString();
+ // model = '${nearestDriverData['model']} - ${nearestDriverData['make']}';
+ // licensePlate = nearestDriverData['car_plate'].toString();
+ // startCarLocationSearch(box.read(BoxName.carType));
+ await getCarsLocationByPassengerAndReloadMarker(
+ box.read(BoxName.carType), 4500);
+ // await getCarsLocationByPassengerAndReloadMarker(
+ // box.read(BoxName.carType), 7000);
+ // await getNearestDriverByPassengerLocation();
+ Log.print('dataCarsLocationByPassenger: $dataCarsLocationByPassenger');
if (dataCarsLocationByPassenger != 'failure' ||
dataCarsLocationByPassenger != null) {
driverToken =
- dataCarsLocationByPassenger['message'][carsOrder]['token'].toString();
+ dataCarsLocationByPassenger['data'][carsOrder]['token'].toString();
driverPhone =
- dataCarsLocationByPassenger['message'][carsOrder]['phone'].toString();
- firstName = dataCarsLocationByPassenger['message'][carsOrder]
+ dataCarsLocationByPassenger['data'][carsOrder]['phone'].toString();
+ firstName = dataCarsLocationByPassenger['data'][carsOrder]
['first_name'] // driverName
.toString();
carColor =
- dataCarsLocationByPassenger['message'][carsOrder]['color'].toString();
- driverRate = dataCarsLocationByPassenger['message'][carsOrder]
+ dataCarsLocationByPassenger['data'][carsOrder]['color'].toString();
+ driverRate = dataCarsLocationByPassenger['data'][carsOrder]
['ratingDriver']
.toString();
carYear =
- dataCarsLocationByPassenger['message'][carsOrder]['year'].toString();
+ dataCarsLocationByPassenger['data'][carsOrder]['year'].toString();
model =
- '${dataCarsLocationByPassenger['message'][carsOrder]['model']} - ${dataCarsLocationByPassenger['message'][carsOrder]['make']}';
- licensePlate = dataCarsLocationByPassenger['message'][carsOrder]
- ['car_plate']
+ '${dataCarsLocationByPassenger['data'][carsOrder]['model']} - ${dataCarsLocationByPassenger['data'][carsOrder]['make']}';
+ licensePlate = dataCarsLocationByPassenger['data'][carsOrder]['car_plate']
.toString();
-
PaymentController paymentController = Get.find();
rideConfirm = true;
shouldFetch = true;
isBottomSheetShown = false;
+ // timeToPassengerFromDriverAfterApplied = nearestCar.duration.toInt();
timeToPassengerFromDriverAfterApplied =
durationToPassenger; //60 todo durationToPassenger;/
isDriversTokensSend = false;
update();
- await CRUD().post(link: AppLink.addRides, payload: {
+ await CRUD()
+ .post(link: "${AppLink.endPoint}/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']}',
@@ -1063,8 +1098,7 @@ class MapPassengerController extends GetxController {
"endtime": durationToAdd.toString(),
"price": totalPassenger.toStringAsFixed(2),
"passenger_id": box.read(BoxName.passengerID).toString(),
- "driver_id": dataCarsLocationByPassenger['message'][carsOrder]
- ['driver_id']
+ "driver_id": dataCarsLocationByPassenger['data'][carsOrder]['driver_id']
.toString(),
"status": "waiting",
'carType': box.read(BoxName.carType),
@@ -1082,7 +1116,7 @@ class MapPassengerController extends GetxController {
totalDriver.toStringAsFixed(2),
durationToRide.toString(),
distance.toStringAsFixed(2),
- dataCarsLocationByPassenger['message'][carsOrder]['driver_id']
+ dataCarsLocationByPassenger['data'][carsOrder]['driver_id']
.toString(),
box.read(BoxName.passengerID).toString(),
box.read(BoxName.name).toString(),
@@ -1091,11 +1125,11 @@ class MapPassengerController extends GetxController {
durationByPassenger.toString(),
distanceByPassenger.toString(),
paymentController.isWalletChecked.toString(),
- dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(),
+ dataCarsLocationByPassenger['data'][carsOrder]['token'].toString(),
durationToPassenger.toString(),
rideId,
rideTimerBegin.toString(),
- dataCarsLocationByPassenger['message'][carsOrder]['driver_id']
+ dataCarsLocationByPassenger['data'][carsOrder]['driver_id']
.toString(),
durationToRide.toString(),
Get.find().wayPoints.length > 1
@@ -1112,73 +1146,24 @@ class MapPassengerController extends GetxController {
.toStringAsFixed(2)
: '0',
box.read(BoxName.email).toString(),
- startNameAddress,
- endNameAddress,
+ data[0]['start_address'],
+ data[0]['end_address'],
box.read(BoxName.carType),
kazan.toStringAsFixed(0),
passengerRate.toStringAsFixed(2),
];
- Log.print('body: ${body}');
+ Log.print('bodyOf order: $body');
FirebaseMessagesController().sendNotificationToDriverMAP(
'Order'.tr,
'from: $startNameAddress\nto: $startNameAddress\ndistanceFromMe: $distanceByPassenger\nDistance :$distance\nPrice ; $totalPassenger',
// jsonDecode(value)['message'].toString(),
- dataCarsLocationByPassenger['message'][carsOrder]['token']
- .toString(),
+ driverToken.toString(),
body,
- 'order.wav'
-
- // polylineCoordinates.toString()
- );
+ 'order.wav');
Log.print(
- 'body: ${dataCarsLocationByPassenger['message'][carsOrder]['token']}');
+ 'dataCarsLocationByPassenger[data]: ${dataCarsLocationByPassenger['data'][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);
+ delayAndFetchRideStatus(rideId, box.read(BoxName.carType));
if (shouldFetch == false) {
startTimer();
update();
@@ -1204,15 +1189,154 @@ class MapPassengerController extends GetxController {
bool isDriversTokensSend = false;
confirmRideForAllDriverAvailable() async {
await getCarsLocationByPassengerAndReloadMarker(
- box.read(BoxName.carType), 7000);
+ box.read(BoxName.carType), 4500);
if (dataCarsLocationByPassenger != 'failure') {
- driversToken.remove(driverToken);
+ // driversToken.remove(driverToken);
PaymentController paymentController = Get.find();
rideConfirm = true;
shouldFetch = true;
isBottomSheetShown = false;
timeToPassengerFromDriverAfterApplied = 60;
+ await CRUD().post(
+ link: "${AppLink.seferCairoServer}/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['data'][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(),
+ }).then((value) {
+ // List body = [
+ rideId = jsonDecode(value)['message'];
+ for (var i = 0; i < dataCarsLocationByPassenger['data'].length; i++) {
+ List body = [
+ '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}',
+ '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}',
+ totalPassenger.toStringAsFixed(2),
+ totalDriver.toStringAsFixed(2),
+ durationToRide.toString(),
+ distance.toStringAsFixed(2),
+ dataCarsLocationByPassenger['data'][i]['driver_id'].toString(),
+ box.read(BoxName.passengerID).toString(),
+ box.read(BoxName.name).toString(),
+ box.read(BoxName.tokenFCM).toString(),
+ box.read(BoxName.phone).toString(),
+ durationByPassenger.toString(),
+ distanceByPassenger.toString(),
+ paymentController.isWalletChecked.toString(),
+ dataCarsLocationByPassenger['data'][i]['token'].toString(),
+ durationToPassenger.toString(),
+ rideId,
+ rideTimerBegin.toString(),
+ dataCarsLocationByPassenger['data'][i]['driver_id'].toString(),
+ durationToRide.toString(),
+ Get.find().wayPoints.length > 1
+ ? 'haveSteps'
+ : 'startEnd',
+ placesCoordinate[0],
+ placesCoordinate[1],
+ placesCoordinate[2],
+ placesCoordinate[3],
+ placesCoordinate[4],
+ costForDriver.toStringAsFixed(2),
+ double.parse(box.read(BoxName.passengerWalletTotal)) < 0
+ ? double.parse(box.read(BoxName.passengerWalletTotal))
+ .toStringAsFixed(2)
+ : '0',
+ box.read(BoxName.email).toString(),
+ data[0]['start_address'],
+ data[0]['end_address'],
+ box.read(BoxName.carType),
+ kazan.toStringAsFixed(0),
+ passengerRate.toStringAsFixed(2),
+ ];
+ // Log.print('body: ${body}');
+ FirebaseMessagesController().sendNotificationToDriverMAP(
+ 'OrderSpeed',
+ rideId.toString(),
+ dataCarsLocationByPassenger['data'][i]['token'].toString(),
+ body,
+ 'order.wav');
+ }
+ });
+ (rideId); //
+ 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['data'][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['data'][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(),
+ });
+
+ delayAndFetchRideStatusForAllDriverAvailable(rideId);
+ update();
+ } else {
+ MyDialog().getDialog("No Car or Driver Found in your area.".tr,
+ "No Car or Driver Found in your area.".tr, () {
+ Get.back();
+ Get.offAll(const MapPagePassenger());
+ });
+ }
+ }
+
+ icreaseForSameRideAndDelay() {
+ PaymentController paymentController = Get.find();
+ rideConfirm = true;
+ shouldFetch = true;
+ isBottomSheetShown = false;
+ timeToPassengerFromDriverAfterApplied = 60;
+ for (var i = 0; i < dataCarsLocationByPassenger['data'].length; i++) {
List body = [
'${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}',
'${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}',
@@ -1220,8 +1344,7 @@ class MapPassengerController extends GetxController {
totalDriver.toStringAsFixed(2),
durationToRide.toString(),
distance.toStringAsFixed(2),
- dataCarsLocationByPassenger['message'][carsOrder]['driver_id']
- .toString(),
+ dataCarsLocationByPassenger['data'][i]['driver_id'].toString(),
box.read(BoxName.passengerID).toString(),
box.read(BoxName.name).toString(),
box.read(BoxName.tokenFCM).toString(),
@@ -1229,12 +1352,11 @@ class MapPassengerController extends GetxController {
durationByPassenger.toString(),
distanceByPassenger.toString(),
paymentController.isWalletChecked.toString(),
- dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(),
+ dataCarsLocationByPassenger['data'][i]['token'].toString(),
durationToPassenger.toString(),
rideId,
rideTimerBegin.toString(),
- dataCarsLocationByPassenger['message'][carsOrder]['driver_id']
- .toString(),
+ dataCarsLocationByPassenger['data'][i]['driver_id'].toString(),
durationToRide.toString(),
Get.find().wayPoints.length > 1
? 'haveSteps'
@@ -1250,33 +1372,26 @@ class MapPassengerController extends GetxController {
.toStringAsFixed(2)
: '0',
box.read(BoxName.email).toString(),
- startNameAddress,
- endNameAddress,
+ data[0]['start_address'],
+ data[0]['end_address'],
box.read(BoxName.carType),
kazan.toStringAsFixed(0),
passengerRate.toStringAsFixed(2),
];
- Log.print('body: ${body}');
- for (var i = 1; i < driversToken.length; i++) {
- FirebaseMessagesController().sendNotificationToDriverMAP('OrderSpeed',
- rideId.toString(), driversToken[i], body, 'order.wav');
- }
+ // Log.print('body: ${body}');
- (rideId);
-
- update();
- } else {
- MyDialog().getDialog("No Car or Driver Found in your area.".tr,
- "No Car or Driver Found in your area.".tr, () {
- Get.back();
- Get.offAll(const MapPagePassenger());
- });
+ FirebaseMessagesController().sendNotificationToDriverMAP(
+ 'OrderSpeed',
+ rideId.toString(),
+ dataCarsLocationByPassenger['data'][i]['token'].toString(),
+ body,
+ 'order.wav');
}
}
int tick = 0; // Move tick outside the function to maintain its state
- void delayAndFetchRideStatus(String rideId) {
+ void delayAndFetchRideStatus(String rideId, carType) {
Timer.periodic(const Duration(seconds: 1), (timer) async {
if (shouldFetch) {
if (remainingTimeToPassengerFromDriverAfterApplied > 0) {
@@ -1284,17 +1399,23 @@ class MapPassengerController extends GetxController {
Log.print('tick: $tick');
- if (res.toString() == 'waiting' && tick >= 15) {
+ if ((res.toString() == 'waiting' || res.toString() == 'Refused') &&
+ tick >= 15) {
timer.cancel(); // Stop the current timer
showAndResearchForCaptain();
//TODO add to wait
+ await getCarsLocationByPassengerAndReloadMarker(carType, 4500);
+ // await getNearestDriverByPassengerLocationAPIGOOGLE();
+ // getCarForFirstConfirm(carType);
confirmRideForAllDriverAvailable();
// delayAndFetchRideStatusForAllDriverAvailable(rideId);
} else if (res.toString() == 'Apply') {
+ Log.print('res.toString() == Apply: ${res.toString()}');
// todo play sound
Get.find()
.playSoundFromAssets('assets/start.wav');
timer.cancel(); // Stop the current timer
+ await getUpdatedRideForDriverApply(rideId);
shouldFetch = false; // Stop further fetches
statusRide = 'Apply';
rideConfirm = false;
@@ -1314,6 +1435,9 @@ class MapPassengerController extends GetxController {
// }
if (tick < 19) {
tick++;
+ } else {
+ timer.cancel();
+ // Stop the timer if remainingTimeToPassengerFromDriverAfterApplied <= 0
}
} else {
timer.cancel();
@@ -1333,6 +1457,8 @@ class MapPassengerController extends GetxController {
duration: const Duration(seconds: 5),
backgroundColor: AppColor.yellowColor,
);
+ isSearchingWindow == true;
+ update();
}
void delayAndFetchRideStatusForAllDriverAvailable(String rideId) async {
@@ -1340,16 +1466,16 @@ class MapPassengerController extends GetxController {
int attemptCounter = 0;
bool isApplied = false;
tick = 0;
- Log.print('tick delayAndFetchRideStatusForAllDriverAvailable: ${tick}');
+ Log.print('tick delayAndFetchRideStatusForAllDriverAvailable: $tick');
void fetchRideStatus() async {
- if (attemptCounter < maxAttempts && !isApplied || tick < 20) {
+ if (attemptCounter < maxAttempts && isApplied == false || tick < 15) {
attemptCounter++;
tick++;
var res = await getRideStatus(rideId);
- if (res.toString() == 'Apply') {
- getUpdatedRideForDriverApply(rideId);
+ if (res.toString() == 'Apply' || res.toString() == 'Applied') {
+ await getUpdatedRideForDriverApply(rideId);
isApplied = true;
shouldFetch = false;
statusRide = 'Apply';
@@ -1421,9 +1547,9 @@ class MapPassengerController extends GetxController {
actions: [
MyElevatedButton(
title: "No, thanks",
- onPressed: () {
+ onPressed: () async {
+ await cancelRide();
Get.back();
- cancelRide();
}),
MyElevatedButton(
title: "Increase Fee".tr,
@@ -1447,7 +1573,7 @@ class MapPassengerController extends GetxController {
reSearchAfterCanceledFromDriver() async {
await getCarsLocationByPassengerAndReloadMarker(
- box.read(BoxName.carType), 7000);
+ box.read(BoxName.carType), 4500);
confirmRideForAllDriverAvailable();
shouldFetch = true; // Stop further fetches
@@ -1485,7 +1611,7 @@ class MapPassengerController extends GetxController {
void timerEnded() async {
runEvery30SecondsUntilConditionMet();
isCancelRidePageShown = false;
- print('isCancelRidePageShown: ${isCancelRidePageShown}');
+ print('isCancelRidePageShown: $isCancelRidePageShown');
update();
}
@@ -1503,6 +1629,7 @@ class MapPassengerController extends GetxController {
await CRUD().get(link: AppLink.getRideOrderID, payload: {'id': rideId});
if (res != 'failure') {
var response = jsonDecode(res);
+ Log.print('getUpdatedRideForDriverApply: $response');
driverId = response['data']['driver_id'];
driverPhone = response['data']['phone'];
driverCarMake = response['data']['make'];
@@ -1510,19 +1637,21 @@ class MapPassengerController extends GetxController {
make = response['data']['make'];
licensePlate = response['data']['car_plate'];
firstName = response['data']['first_name'];
+ driverName = response['data']['driverName'];
driverToken = response['data']['token'];
+ Log.print('driverToken updated: $driverToken');
carYear = response['data']['year'];
- driverRate = response['data']['ratingDriver'];
- }
- driversToken.remove(driverToken);
- for (var i = 1; i < driversToken.length; i++) {
- FirebaseMessagesController().sendNotificationToAnyWithoutData(
- 'Order Applied'.tr,
- '$driverName Apply order\nTake attention in other order'.tr,
- driversToken[i],
- 'start.wav',
- );
+ driverRate = response['data']['ratingDriver'].toString();
}
+ // driversToken.remove(driverToken);
+ // for (var i = 1; i < driversToken.length; i++) {
+ FirebaseMessagesController().sendNotificationToAnyWithoutData(
+ 'Order Applied'.tr,
+ '$driverName Apply order\nTake attention in other order'.tr,
+ driverToken,
+ 'start.wav',
+ );
+ // }
// }
}
@@ -1645,34 +1774,71 @@ class MapPassengerController extends GetxController {
final int updateIntervalMs = 100; // Update every 100ms
final double minMovementThreshold =
10; // Minimum movement in meters to trigger update
+ Future getCarForFirstConfirm(String carType) async {
+ bool foundCars = false;
+ int attempt = 0;
+
+ // Set up the periodic timer
+ Timer? timer = Timer.periodic(const Duration(seconds: 4), (Timer t) async {
+ // Attempt to get car location
+ foundCars = await getCarsLocationByPassengerAndReloadMarker(
+ carType, attempt * 2000);
+ Log.print('foundCars: $foundCars');
+
+ if (foundCars) {
+ // If cars are found, cancel the timer and exit the search
+ t.cancel();
+ } else if (attempt >= 4) {
+ // After 4 attempts, stop the search
+ t.cancel();
+
+ // No cars found after 4 attempts
+ // MyDialog().getDialog(
+ // "No Car or Driver Found in your area.".tr,
+ // "No Car or Driver Found in your area.".tr,
+ // () {
+ // Get.back();
+ // },
+ // );
+ if (!foundCars) {
+ noCarString = true;
+ dataCarsLocationByPassenger = 'failure';
+ }
+
+ update();
+ }
+
+ attempt++; // Increment attempt
+ });
+ }
void startCarLocationSearch(String carType) {
int searchInterval = 5; // Interval in seconds
- Log.print('searchInterval: ${searchInterval}');
+ Log.print('searchInterval: $searchInterval');
int boundIncreaseStep = 2500; // Initial bounds in meters
- Log.print('boundIncreaseStep: ${boundIncreaseStep}');
+ Log.print('boundIncreaseStep: $boundIncreaseStep');
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}');
+ Log.print('initial attempt: $attempt');
Timer.periodic(Duration(seconds: searchInterval), (Timer timer) async {
- Log.print('Current attempt: ${attempt}'); // Log current attempt
+ Log.print('Current attempt: $attempt'); // Log current attempt
bool foundCars = false;
if (attempt >= maxAttempts) {
timer.cancel();
if (foundCars == false) {
noCarString = true;
- dataCarsLocationByPassenger = 'failure';
+ // dataCarsLocationByPassenger = 'failure';
update();
}
- return;
+ // return;
} else if (reloadStartApp == true) {
- Log.print('reloadStartApp: ${reloadStartApp}');
+ Log.print('reloadStartApp: $reloadStartApp');
foundCars = await getCarsLocationByPassengerAndReloadMarker(
carType, boundIncreaseStep);
- Log.print('foundCars: ${foundCars}');
+ Log.print('foundCars: $foundCars');
if (foundCars) {
timer.cancel();
@@ -1682,7 +1848,7 @@ class MapPassengerController extends GetxController {
timer.cancel();
}
Log.print(
- 'Incrementing attempt to: ${attempt}'); // Log incremented attempt
+ 'Incrementing attempt to: $attempt'); // Log incremented attempt
if (boundIncreaseStep < maxBoundIncreaseStep) {
boundIncreaseStep += 1500; // Increase bounds
@@ -1691,7 +1857,7 @@ class MapPassengerController extends GetxController {
maxBoundIncreaseStep; // Ensure it does not exceed the maximum
}
Log.print(
- 'New boundIncreaseStep: ${boundIncreaseStep}'); // Log new bounds
+ 'New boundIncreaseStep: $boundIncreaseStep'); // Log new bounds
}
}
}
@@ -1708,7 +1874,7 @@ class MapPassengerController extends GetxController {
} else if (latitude >= 29.904975 &&
latitude <= 30.143372 &&
longitude >= 30.787030 &&
- longitude <= 31.238843) {
+ longitude <= 31.215009) {
box.write(BoxName.serverChosen, AppLink.seferGizaServer);
return 'Giza';
} else if (latitude >= 30.396286 &&
@@ -1719,141 +1885,139 @@ class MapPassengerController extends GetxController {
return 'Alexandria';
} else {
box.write(BoxName.serverChosen, AppLink.seferCairoServer);
- return 'Outside';
+ return 'Cairo';
}
}
Future getCarsLocationByPassengerAndReloadMarker(
String carType, int boundIncreaseStep) async {
- if (statusRide == 'wait') {
- carsLocationByPassenger = [];
- LatLngBounds bounds = calculateBounds(passengerLocation.latitude,
- passengerLocation.longitude, boundIncreaseStep.toDouble());
- var res;
- // await getLocation();
+ // if (statusRide == 'wait') {
+ carsLocationByPassenger = [];
+ LatLngBounds bounds = calculateBounds(passengerLocation.latitude,
+ passengerLocation.longitude, boundIncreaseStep.toDouble());
+ var res;
+ // await getLocation();
- switch (carType) {
- case '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(),
- });
- break;
- case 'Comfort':
- res = await CRUD()
- .get(link: AppLink.getCarsLocationByPassengerComfort, payload: {
- 'southwestLat': bounds.southwest.latitude.toString(),
- 'southwestLon': bounds.southwest.longitude.toString(),
- 'northeastLat': bounds.northeast.latitude.toString(),
- 'northeastLon': bounds.northeast.longitude.toString(),
- });
- break;
- case '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(),
- });
- break;
- case 'Scooter':
- 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(),
- });
- break;
- case 'Awfar Car':
- res = await CRUD()
- .get(link: AppLink.getCarsLocationByPassengerBalash, payload: {
- 'southwestLat': bounds.southwest.latitude.toString(),
- 'southwestLon': bounds.southwest.longitude.toString(),
- 'northeastLat': bounds.northeast.latitude.toString(),
- 'northeastLon': bounds.northeast.longitude.toString(),
- });
- break;
- case 'Pink Bike':
- res = await CRUD()
- .get(link: AppLink.getCarsLocationByPassengerPinkBike, payload: {
- 'southwestLat': bounds.southwest.latitude.toString(),
- 'southwestLon': bounds.southwest.longitude.toString(),
- 'northeastLat': bounds.northeast.latitude.toString(),
- 'northeastLon': bounds.northeast.longitude.toString(),
- });
- break;
- default:
- 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 = 'failure';
- update();
- return false;
- } else {
- noCarString = false;
- dataCarsLocationByPassenger = jsonDecode(res);
-
- // Check if 'message' is present and not null
- if (dataCarsLocationByPassenger['message'] != null &&
- dataCarsLocationByPassenger['message'].isNotEmpty) {
- // Check if carsOrder is within bounds
- if (carsOrder < dataCarsLocationByPassenger['message'].length) {
- driverId = dataCarsLocationByPassenger['message'][carsOrder]
- ['driver_id']
- .toString();
- gender = dataCarsLocationByPassenger['message'][carsOrder]['gender']
- .toString();
- driverToken = dataCarsLocationByPassenger['message'][carsOrder]
- ['token']
- .toString();
- } else {
- print('carsOrder is out of bounds for message array');
- return false;
- }
- } else {
- // Get.defaultDialog(title: 'No cars available ');
- print('No cars available or message is null');
- return false;
- }
-
- carsLocationByPassenger.clear(); // Clear existing markers
-
- for (var i = 0;
- i < dataCarsLocationByPassenger['message'].length;
- i++) {
- var json = dataCarsLocationByPassenger['message'][i];
- _updateOrCreateMarker(
- MarkerId(json['latitude']).toString(),
- LatLng(double.parse(json['latitude']),
- double.parse(json['longitude'])),
- double.parse(json['heading']),
- _getIconForCar(json),
- );
-
- driversToken.add(json['token']);
- }
-
- // Add fake car markers
- _addFakeCarMarkers(passengerLocation, 2);
-
- update();
- return true;
- }
+ switch (carType) {
+ case '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(),
+ });
+ break;
+ case 'Comfort':
+ res = await CRUD()
+ .get(link: AppLink.getCarsLocationByPassengerComfort, payload: {
+ 'southwestLat': bounds.southwest.latitude.toString(),
+ 'southwestLon': bounds.southwest.longitude.toString(),
+ 'northeastLat': bounds.northeast.latitude.toString(),
+ 'northeastLon': bounds.northeast.longitude.toString(),
+ });
+ break;
+ case '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(),
+ });
+ break;
+ case 'Scooter':
+ 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(),
+ });
+ break;
+ case 'Awfar Car':
+ res = await CRUD()
+ .get(link: AppLink.getCarsLocationByPassengerBalash, payload: {
+ 'southwestLat': bounds.southwest.latitude.toString(),
+ 'southwestLon': bounds.southwest.longitude.toString(),
+ 'northeastLat': bounds.northeast.latitude.toString(),
+ 'northeastLon': bounds.northeast.longitude.toString(),
+ });
+ break;
+ case 'Pink Bike':
+ res = await CRUD()
+ .get(link: AppLink.getCarsLocationByPassengerPinkBike, payload: {
+ 'southwestLat': bounds.southwest.latitude.toString(),
+ 'southwestLon': bounds.southwest.longitude.toString(),
+ 'northeastLat': bounds.northeast.latitude.toString(),
+ 'northeastLon': bounds.northeast.longitude.toString(),
+ });
+ break;
+ default:
+ 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(),
+ });
}
- return false;
+
+ if (res == 'failure') {
+ noCarString = true;
+ // dataCarsLocationByPassenger = 'failure';
+ update();
+ return false;
+ } else {
+ noCarString = false;
+ dataCarsLocationByPassenger = jsonDecode(res);
+
+ // Check if 'message' is present and not null
+ if (dataCarsLocationByPassenger['message'] != null &&
+ dataCarsLocationByPassenger['message'].isNotEmpty) {
+ // Check if carsOrder is within bounds
+ // if (carsOrder < dataCarsLocationByPassenger['message'].length) {
+ // driverId = dataCarsLocationByPassenger['message'][carsOrder]
+ // ['driver_id']
+ // .toString();
+ // gender = dataCarsLocationByPassenger['message'][carsOrder]['gender']
+ // .toString();
+ // driverToken = dataCarsLocationByPassenger['message'][carsOrder]
+ // ['token']
+ // .toString();
+ // } else {
+ // print('carsOrder is out of bounds for message array');
+ // return false;
+ // }
+ } else {
+ // Get.defaultDialog(title: 'No cars available ');
+ print('No cars available or message is null');
+ return false;
+ }
+
+ carsLocationByPassenger.clear(); // Clear existing markers
+
+ for (var i = 0; i < dataCarsLocationByPassenger['message'].length; i++) {
+ var json = dataCarsLocationByPassenger['message'][i];
+ _updateOrCreateMarker(
+ MarkerId(json['latitude']).toString(),
+ LatLng(
+ double.parse(json['latitude']), double.parse(json['longitude'])),
+ double.parse(json['heading']),
+ _getIconForCar(json),
+ );
+
+ driversToken.add(json['token']);
+ }
+
+ // Add fake car markers
+ _addFakeCarMarkers(passengerLocation, 1);
+
+ update();
+ return true;
+ }
+ // }
+ // return false;
}
final List