25-5-30/1

This commit is contained in:
Hamza-Ayed
2025-05-30 16:57:40 +03:00
parent f3ada31b3b
commit ce3ae01a75
64 changed files with 857 additions and 939 deletions

View File

@@ -15,28 +15,27 @@ class AppLink {
// static final String seferAlexandriaServer = Env.seferAlexandriaServer;
// static final String seferCairoServer = Env.seferCairoServer;
// static final String seferCairoServer =
// 'https://server.sefer.click/sefer.click/sefer';
// 'https://api.tripz-egypt.com/tripz';
// static final String seferGizaServer = Env.seferCairoServer;
// static final String seferAlexandriaServer = Env.seferCairoServer;
// static final String seferPaymentServer = '${Env.seferCairoServer}/ride';
// static final String seferPaymentServer0 = Env.seferCairoServer;
// static const String seferGizaServer = 'https://gizasefer.online/sefer';
// static final String seferGizaServer = Env.seferGizaServer;
static final String endPoint =
box.read(BoxName.serverChosen) ?? box.read(BoxName.basicLink);
// 'https://server.sefer.click/sefer.click/sefer';
static final String endPoint = 'https://api.tripz-egypt.com/tripz';
// 'https://api.tripz-egypt.com/tripz';
static final String server = endPoint;
static String seferCairoServer = endPoint;
static String seferGizaServer = box.read('Giza');
static String seferAlexandriaServer = box.read('Alexandria');
static String seferGizaServer =
box.read('Giza') ?? box.read(BoxName.serverChosen);
static String seferAlexandriaServer =
box.read('Alexandria') ?? box.read(BoxName.serverChosen);
// static final String server = Env.serverPHP;
static String loginJwtDriver =
"https://server.sefer.click/sefer.click/sefer/loginJwtDriver.php";
static String loginJwtDriver = "$server/loginJwtDriver.php";
static String loginJwtWalletDriver =
"$seferPaymentServer/loginJwtWalletDriver.php";
static String loginFirstTimeDriver =
"https://server.sefer.click/sefer.click/sefer/loginFirstTimeDriver.php";
static String loginFirstTimeDriver = "$server/loginFirstTimeDriver.php";
static String googleMapsLink = 'https://maps.googleapis.com/maps/api/';
static String llama = 'https://api.llama-api.com/chat/completions';
@@ -92,7 +91,7 @@ class AppLink {
static String ride = '$server/ride';
static String addCancelRideFromPassenger = "$server/ride/cancelRide/add.php";
static String addCancelTripFromDriverAfterApplied =
"$server/ride/cancelRide/addCancelTripFromDriverAfterApplied.php";
"$ride/cancelRide/addCancelTripFromDriverAfterApplied.php";
static String cancelRide = "$server/ride/cancelRide/get.php";
//-----------------ridessss------------------
static String addRides = "$ride/rides/add.php";
@@ -102,10 +101,9 @@ class AppLink {
static String getTripCountByCaptain = "$ride/rides/getTripCountByCaptain.php";
static String getRideOrderID = "$ride/rides/getRideOrderID.php";
static String getRideStatus = "$ride/rides/getRideStatus.php";
static String getapiKey = Env.getapiKey;
static String getapiKey = "$ride/apiKey/get.php";
static String getapiKeySefer =
"https://api.sefer.click/sefer/ride/apiKey/get.php";
static String getapiKeySefer = "$ride/apiKey/get.php";
static String getRideStatusBegin = "$ride/rides/getRideStatusBegin.php";
static String getRideStatusFromStartApp =
"$ride/rides/getRideStatusFromStartApp.php";
@@ -226,16 +224,16 @@ class AppLink {
static String addRateToDriver = "$ride/rate/addRateToDriver.php";
static String addRateApp = "$ride/rate/add_rate_app.php";
static String sendEmailRateingApp =
"https://api.sefer.click/sefer/ride/rate/sendEmailRateingApp.php";
"https://api.tripz-egypt.com/tripz/ride/rate/sendEmailRateingApp.php";
static String getDriverRate = "$ride/rate/getDriverRate.php";
static String getPassengerRate = "$ride/rate/getPassengerRate.php";
////////////////emails ============//
static String sendEmailToPassengerForTripDetails =
"https://api.sefer.click/sefer/ride/rides/emailToPassengerTripDetail.php";
"https://api.tripz-egypt.com/tripz/ride/rides/emailToPassengerTripDetail.php";
static String sendEmailToDrivertransaction =
"https://api.sefer.click/sefer/Admin/sendEmailToDrivertransaction.php";
// "https://api.sefer.click/sefer/Admin/sendEmailToDrivertransaction.php";
"https://api.tripz-egypt.com/tripz/Admin/sendEmailToDrivertransaction.php";
// "https://api.tripz-egypt.com/tripz/Admin/sendEmailToDrivertransaction.php";
// ===========================================
static String pathImage = "$server/upload/types/";
static String uploadImage = "$server/uploadImage.php";
@@ -253,7 +251,7 @@ class AppLink {
static String getCarsLocationByPassenger = "$location/get.php";
static String addpassengerLocation = "$location/addpassengerLocation.php";
static String getLocationAreaLinks =
"https://server.sefer.click/sefer.click/sefer/ride/location/get_location_area_links.php";
"https://api.tripz-egypt.com/tripz/ride/location/get_location_area_links.php";
static String getLatestLocationPassenger =
"$location/getLatestLocationPassenger.php";
static String getFemalDriverLocationByPassenger =
@@ -261,6 +259,7 @@ class AppLink {
static String getDriverCarsLocationToPassengerAfterApplied =
"$location/getDriverCarsLocationToPassengerAfterApplied.php";
static String addCarsLocationByPassenger = "$location/add.php";
static String saveBehavior = "$location/save_behavior.php";
static String addCarsLocationGizaEndpoint = "$location/add.php";
static String addCarsLocationAlexandriaEndpoint = "$location/add.php";
static String addCarsLocationCairoEndpoint = "$location/add.php";
@@ -271,6 +270,10 @@ class AppLink {
static String getTotalDriverDurationToday =
"$location/getTotalDriverDurationToday.php";
//==================get_driver_behavior.php=============
static String get_driver_behavior =
'$server/ride/driver_behavior/get_driver_behavior.php';
//==================cars new drivers=============
static String addNewCarsDrivers = '$server/ride/carDrivers/add.php';
static String getNewCarsDrivers = '$server/ride/carDrivers/get.php';

View File

@@ -5,6 +5,7 @@ class TableName {
static const String driverOrdersRefuse = "driverOrdersRefuse";
static const String rideLocation = "rideLocation";
static const String faceDetectTimes = "faceDetectTimes";
static const String behavior = "behavior";
static const String captainNotification = "captainNotification";
static const String applyRideFromOverLay = "applyRideFromOverLay";
}

View File

@@ -45,9 +45,8 @@ class HistoryCaptainController extends GetxController {
getHistoryDetails(String orderId) async {
isloading = true;
var res = await CRUD().get(
link: AppLink.getRideOrderID,
payload: {'id': EncryptionHelper.instance.encryptData(orderId)});
var res = await CRUD()
.get(link: AppLink.getRideOrderID, payload: {'id': (orderId)});
historyDetailsData = jsonDecode(res);
isloading = false;
update();

View File

@@ -150,9 +150,9 @@ Download the Tripz app now and enjoy your ride!
void onSelectDriverInvitation(int index) async {
MyDialog().getDialog(
int.parse((driverInvitationData[index]['countOfInvitDriver'])) < 100
? '${'When'.tr} ${EncryptionHelper.instance.decryptData(driverInvitationData[index]['invitorName'])} ${"complete, you can claim your gift".tr} '
? '${'When'.tr} ${(driverInvitationData[index]['invitorName'])} ${"complete, you can claim your gift".tr} '
: 'You deserve the gift'.tr,
'${EncryptionHelper.instance.decryptData(driverInvitationData[index]['invitorName'])} ${(driverInvitationData[index]['countOfInvitDriver'])} / 100 ${'Trip'.tr}',
'${(driverInvitationData[index]['invitorName'])} ${(driverInvitationData[index]['countOfInvitDriver'])} / 100 ${'Trip'.tr}',
() async {
bool isAvailable = await LocalAuthentication().isDeviceSupported();
if (int.parse((driverInvitationData[index]['countOfInvitDriver'])) <
@@ -173,10 +173,9 @@ Download the Tripz app now and enjoy your ride!
if ((driverInvitationData[index]['isGiftToken']).toString() ==
'0') {
Get.back();
await CRUD().post(link: AppLink.updateInviteDriver, payload: {
'id': EncryptionHelper.instance
.encryptData(driverInvitationData[index]['id'])
});
await CRUD().post(
link: AppLink.updateInviteDriver,
payload: {'id': (driverInvitationData[index]['id'])});
await Get.find<CaptainWalletController>().addDriverPayment(
'paymentMethod',
('500'),
@@ -186,8 +185,7 @@ Download the Tripz app now and enjoy your ride!
await Get.find<CaptainWalletController>()
.addDriverWalletToInvitor(
'paymentMethod',
EncryptionHelper.instance.encryptData(
driverInvitationData[index]['driverInviterId']),
(driverInvitationData[index]['driverInviterId']),
('500'),
);
await Get.find<CaptainWalletController>()
@@ -231,9 +229,9 @@ Download the Tripz app now and enjoy your ride!
int.parse(driverInvitationDataToPassengers[index]['countOfInvitDriver']
.toString()) <
3
? '${'When'.tr} ${EncryptionHelper.instance.decryptData(driverInvitationDataToPassengers[index]['passengerName'].toString())} ${"complete, you can claim your gift".tr} '
? '${'When'.tr} ${(driverInvitationDataToPassengers[index]['passengerName'].toString())} ${"complete, you can claim your gift".tr} '
: 'You deserve the gift'.tr,
'${EncryptionHelper.instance.decryptData(driverInvitationDataToPassengers[index]['passengerName'].toString())} ${driverInvitationDataToPassengers[index]['countOfInvitDriver']} / 3 ${'Trip'.tr}',
'${(driverInvitationDataToPassengers[index]['passengerName'].toString())} ${driverInvitationDataToPassengers[index]['countOfInvitDriver']} / 3 ${'Trip'.tr}',
() async {
if (int.parse(driverInvitationDataToPassengers[index]
['countOfInvitDriver']
@@ -342,7 +340,7 @@ Download the Tripz app now and enjoy your ride!
});
if (response != 'failure') {
var d = jsonDecode(response);
var d = (response);
mySnackbarSuccess('Invite sent successfully'.tr);
String message = '${'*Tripz DRIVER CODE*'.tr}\n\n'
'${"Use this code in registration".tr}\n'

View File

@@ -98,11 +98,12 @@ class LoginDriverController extends GetxController {
final random = Random();
if (random.nextBool()) {
await SecurityHelper.performSecurityChecks();
// await SecurityHelper.performSecurityChecks();
} else {
await SecurityChecks.isDeviceRootedFromNative(Get.context!);
}
String fingerPrint = await DeviceHelper.getDeviceFingerprint();
// print('fingerPrint: ${fingerPrint}');
dev = Platform.isAndroid ? 'android' : 'ios';
var payload = {
'id': box.read(BoxName.driverID),
@@ -118,7 +119,7 @@ class LoginDriverController extends GetxController {
// Log.print('response.body: ${response1.body}');
// print(payload);
// Log.print(
// 'jsonDecode(response1.body)["jwt"]: ${jsonDecode(response1.body)['jwt']}');
// 'jsonDecode(response1.body)["jwt"]: ${jsonDecode(response1.body)['jwt']}');
await box.write(BoxName.hmac, jsonDecode(response1.body)['hmac']);
return jsonDecode(response1.body)['jwt'].toString();
}
@@ -144,9 +145,11 @@ class LoginDriverController extends GetxController {
);
if (response0.statusCode == 200) {
final decodedResponse1 = jsonDecode(response0.body);
// Log.print('decodedResponse1: ${decodedResponse1}');
final jwt = decodedResponse1['jwt'];
box.write(BoxName.jwt, X.c(X.c(X.c(jwt, cn), cC), cs));
// await box.write(BoxName.hmac, decodedResponse1['hmac']);
await AppInitializer().getAIKey(Driver.keyOfApp);
await AppInitializer().getAIKey(Driver.initializationVector);
@@ -183,6 +186,7 @@ class LoginDriverController extends GetxController {
// Log.print('decodedResponse1: ${decodedResponse1}');
final jwt = decodedResponse1['jwt'];
// await box.write(BoxName.hmac, decodedResponse1['hmac']);
await box.write(BoxName.jwt, X.c(X.c(X.c(jwt, cn), cC), cs));
await AppInitializer().getKey();
}
@@ -230,7 +234,7 @@ class LoginDriverController extends GetxController {
var res = await CRUD().get(link: AppLink.loginFromGoogleCaptin, payload: {
'email': email.toString().contains('@')
// ? (box.read(BoxName.emailDriver))
? EncryptionHelper.instance.encryptData(email)
? (email)
: email,
'id': driverID,
});
@@ -252,10 +256,7 @@ class LoginDriverController extends GetxController {
if (jsonDecoeded.isNotEmpty) {
if (jsonDecoeded['status'] == 'success' &&
jsonDecoeded['data'][0]['is_verified'].toString() == '1') {
box.write(
BoxName.emailDriver,
EncryptionHelper.instance
.decryptData(jsonDecoeded['data'][0]['email']));
box.write(BoxName.emailDriver, jsonDecoeded['data'][0]['email']);
box.write(BoxName.firstTimeLoadKey, 'false');
box.write(BoxName.driverID, (jsonDecoeded['data'][0]['id']));
box.write(BoxName.isTest, '1');
@@ -276,16 +277,13 @@ class LoginDriverController extends GetxController {
(jsonDecoeded['data'][0]['accountBank']));
box.write(
BoxName.nameDriver,
'${EncryptionHelper.instance.decryptData(jsonDecoeded['data'][0]['first_name'])}'
' ${EncryptionHelper.instance.decryptData(jsonDecoeded['data'][0]['last_name'])}');
'${(jsonDecoeded['data'][0]['first_name'])}'
' ${(jsonDecoeded['data'][0]['last_name'])}');
if (((jsonDecoeded['data'][0]['model'])
.toString()
.contains('دراجه') ||
jsonDecoeded['data'][0]['make'].toString().contains('دراجه '))) {
if (EncryptionHelper.instance
.decryptData(jsonDecoeded['data'][0]['gender'])
.toString() ==
'Male') {
if ((jsonDecoeded['data'][0]['gender']).toString() == 'Male') {
box.write(BoxName.carTypeOfDriver, 'Scooter');
} else {
box.write(BoxName.carTypeOfDriver, 'Pink Bike');
@@ -311,8 +309,9 @@ class LoginDriverController extends GetxController {
link: AppLink.getDriverToken,
payload: {'captain_id': (box.read(BoxName.driverID)).toString()});
String? fingerPrint = await DeviceHelper.getDeviceFingerprint();
await storage.write(key: BoxName.fingerPrint, value: fingerPrint);
String fingerPrint = await DeviceHelper.getDeviceFingerprint();
await storage.write(
key: BoxName.fingerPrint, value: fingerPrint.toString());
if (token != 'failure') {
if ((jsonDecode(token)['data'][0]['token']) !=
@@ -320,9 +319,7 @@ class LoginDriverController extends GetxController {
Get.put(FirebaseMessagesController()).sendNotificationToDriverMAP(
'token change'.tr,
'change device'.tr,
EncryptionHelper.instance
.decryptData(jsonDecode(token)['data'][0]['token'])
.toString(),
(jsonDecode(token)['data'][0]['token']).toString(),
[],
'promo.wav');
await Get.defaultDialog(
@@ -337,9 +334,10 @@ class LoginDriverController extends GetxController {
'captain_id': (box.read(BoxName.driverID)).toString(),
'fingerPrint': (fingerPrint).toString()
});
// to save in payment server fingerprint
await CRUD().post(
link:
"${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php",
"${AppLink.seferPaymentServer}/ride/firebase/addDriver.php",
payload: {
'token': (box.read(BoxName.tokenDriver)),
'captain_id':
@@ -381,7 +379,7 @@ class LoginDriverController extends GetxController {
update();
var res = await CRUD()
.get(link: AppLink.loginUsingCredentialsWithoutGoogle, payload: {
'email': EncryptionHelper.instance.encryptData(email),
'email': (email),
'password': password,
});
box.write(BoxName.emailDriver, (email).toString());
@@ -409,33 +407,25 @@ class LoginDriverController extends GetxController {
jsonDecoeded['data'][0]['is_verified'].toString());
box.write(BoxName.phoneDriver, (jsonDecoeded['data'][0]['phone']));
box.write(
BoxName.nameArabic,
EncryptionHelper.instance
.decryptData(jsonDecoeded['data'][0]['name_arabic']));
BoxName.nameArabic, (jsonDecoeded['data'][0]['name_arabic']));
box.write(
BoxName.bankCodeDriver, (jsonDecoeded['data'][0]['bankCode']));
box.write(BoxName.accountBankNumberDriver,
jsonDecoeded['data'][0]['accountBank']);
box.write(
BoxName.nameDriver,
'${EncryptionHelper.instance.decryptData(jsonDecoeded['data'][0]['first_name'])}'
' ${EncryptionHelper.instance.decryptData(jsonDecoeded['data'][0]['last_name'])}');
'${(jsonDecoeded['data'][0]['first_name'])}'
' ${(jsonDecoeded['data'][0]['last_name'])}');
if ((jsonDecoeded['data'][0]['model'].toString().contains('دراجه') ||
jsonDecoeded['data'][0]['make'].toString().contains('دراجه '))) {
if (EncryptionHelper.instance
.decryptData(jsonDecoeded['data'][0]['gender'])
.toString() ==
'Male') {
if ((jsonDecoeded['data'][0]['gender']).toString() == 'Male') {
box.write(BoxName.carTypeOfDriver, 'Scooter');
} else {
box.write(BoxName.carTypeOfDriver, 'Pink Bike');
}
} else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) >
2017) {
if (EncryptionHelper.instance
.decryptData(jsonDecoeded['data'][0]['gender'])
.toString() !=
'Male') {
if ((jsonDecoeded['data'][0]['gender']).toString() != 'Male') {
box.write(BoxName.carTypeOfDriver, 'Lady');
} else {
box.write(BoxName.carTypeOfDriver, 'Comfort');
@@ -463,9 +453,7 @@ class LoginDriverController extends GetxController {
Get.put(FirebaseMessagesController()).sendNotificationToDriverMAP(
'token change'.tr,
'change device'.tr,
EncryptionHelper.instance
.decryptData(jsonDecode(token)['data'][0]['token'])
.toString(),
(jsonDecode(token)['data'][0]['token']).toString(),
[],
'ding.wav');
Get.defaultDialog(

View File

@@ -100,7 +100,6 @@ class RegisterCaptainController extends GetxController {
SmsEgyptController smsEgyptController = Get.put(SmsEgyptController());
isLoading = true;
update();
int randomNumber = Random().nextInt(100000) + 1;
isLoading = true;
update();
if (formKey3.currentState!.validate()) {
@@ -108,8 +107,7 @@ class RegisterCaptainController extends GetxController {
if (isValidEgyptianPhoneNumber(phoneController.text)) {
var responseCheker = await CRUD()
.post(link: AppLink.checkPhoneNumberISVerfiedDriver, payload: {
'phone_number': EncryptionHelper.instance
.encryptData('+2${phoneController.text}'),
'phone_number': ('+2${phoneController.text}'),
});
if (responseCheker != 'failure') {
var d = jsonDecode(responseCheker);
@@ -117,29 +115,18 @@ class RegisterCaptainController extends GetxController {
Get.snackbar('Phone number is verified before'.tr, '',
backgroundColor: AppColor.greenColor);
box.write(BoxName.phoneVerified, '1');
box.write(
BoxName.phone,
EncryptionHelper.instance
.encryptData('+2${phoneController.text}'));
box.write(BoxName.phone, ('+2${phoneController.text}'));
await Get.put(LoginDriverController()).loginWithGoogleCredential(
box.read(BoxName.driverID).toString(),
EncryptionHelper.instance
.encryptData(box.read(BoxName.emailDriver).toString()),
(box.read(BoxName.emailDriver).toString()),
);
} else {
await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: {
'phone_number': EncryptionHelper.instance
.encryptData('+2${phoneController.text}'),
'token_code': EncryptionHelper.instance
.encryptData(randomNumber.toString()),
'phone_number': ('+2${phoneController.text}'),
"driverId": box.read(BoxName.driverID),
"email": EncryptionHelper.instance
.encryptData(box.read(BoxName.emailDriver)),
"email": (box.read(BoxName.emailDriver)),
});
await smsEgyptController.sendSmsEgypt(
phoneController.text.toString(), randomNumber.toString());
isSent = true;
isLoading = false;
@@ -147,17 +134,11 @@ class RegisterCaptainController extends GetxController {
}
} else {
await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: {
'phone_number': EncryptionHelper.instance
.encryptData('+2${phoneController.text}'),
'token_code': EncryptionHelper.instance
.encryptData(randomNumber.toString()),
'phone_number': ('+2${phoneController.text}'),
"driverId": box.read(BoxName.driverID),
"email": box.read(BoxName.emailDriver),
});
await smsEgyptController.sendSmsEgypt(
phoneController.text.toString(), randomNumber.toString());
isSent = true;
isLoading = false;
@@ -250,8 +231,7 @@ class RegisterCaptainController extends GetxController {
_handleAlreadyVerified() {
mySnackbarSuccess('Phone number is already verified'.tr);
box.write(BoxName.phoneVerified, '1');
box.write(BoxName.phone,
EncryptionHelper.instance.encryptData('+2${phoneController.text}'));
box.write(BoxName.phone, ('+2${phoneController.text}'));
Get.put(LoginDriverController()).loginWithGoogleCredential(
box.read(BoxName.driverID).toString(),
box.read(BoxName.emailDriver).toString(),
@@ -266,15 +246,14 @@ class RegisterCaptainController extends GetxController {
await CRUD().post(
link: AppLink.sendVerifyOtpMessage,
payload: {
'phone_number': EncryptionHelper.instance.encryptData('+2$phoneNumber'),
'token_code':
EncryptionHelper.instance.encryptData(randomNumber.toString()),
'phone_number': ('+2$phoneNumber'),
'token_code': (randomNumber.toString()),
'driverId': box.read(BoxName.driverID),
'email': box.read(BoxName.emailDriver),
},
);
await smsEgyptController.sendSmsEgypt(phoneNumber, randomNumber.toString());
await smsEgyptController.sendSmsEgypt(phoneNumber);
lastOtpSentTime = DateTime.now(); // Update the last OTP sent time
isSent = true;
@@ -286,15 +265,12 @@ class RegisterCaptainController extends GetxController {
// var loginDriverController = Get.put(LoginDriverController());
if (formKey3.currentState!.validate()) {
var res = await CRUD().post(link: AppLink.verifyOtpDriver, payload: {
'phone_number':
EncryptionHelper.instance.encryptData('+2${phoneController.text}'),
'token_code':
EncryptionHelper.instance.encryptData(verifyCode.text.toString()),
'phone_number': ('+2${phoneController.text}'),
'token_code': (verifyCode.text.toString()),
});
if (res != 'failure') {
// var dec = jsonDecode(res);
box.write(BoxName.phoneDriver,
EncryptionHelper.instance.encryptData('+2${phoneController.text}'));
box.write(BoxName.phoneDriver, ('+2${phoneController.text}'));
box.write(BoxName.phoneVerified, '1');
// loginDriverController.isGoogleLogin == true
@@ -319,10 +295,9 @@ class RegisterCaptainController extends GetxController {
sendVerifications() async {
var res = await CRUD().post(link: AppLink.verifyEmail, payload: {
'email': emailController.text.isEmpty
? EncryptionHelper.instance.encryptData(
Get.find<LoginDriverController>().emailController.text.toString())
: EncryptionHelper.instance.encryptData(emailController.text),
'token': EncryptionHelper.instance.encryptData(verifyCode.text),
? (Get.find<LoginDriverController>().emailController.text.toString())
: (emailController.text),
'token': (verifyCode.text),
});
if (res != 'failure') {

View File

@@ -94,9 +94,8 @@ class GoogleSignInHelper {
// Retrieve driverID and emailDriver with added validation
final driverID =
(box.read(BoxName.driverID)!.toString()) ?? 'Unknown ID';
final emailDriver = EncryptionHelper.instance
.encryptData(box.read(BoxName.emailDriver)!.toString()) ??
'Unknown Email';
final emailDriver =
(box.read(BoxName.emailDriver)!.toString()) ?? 'Unknown Email';
// Debug print statements
print('Driver ID: $driverID');

View File

@@ -60,10 +60,7 @@ class LoginController extends GetxController {
if (jsonDecoeded['status'] == 'success') {
if (jsonDecoeded['data'][0]['verified'] == 1) {
box.write(BoxName.driverID, jsonDecoeded['data'][0]['id']);
box.write(
BoxName.emailDriver,
EncryptionHelper.instance
.encryptData(jsonDecoeded['data'][0]['email']));
box.write(BoxName.emailDriver, (jsonDecoeded['data'][0]['email']));
box.write(
BoxName.nameDriver,
jsonDecoeded['data'][0]['first_name'] +

View File

@@ -71,8 +71,7 @@ class FirebaseMessagesController extends GetxController {
Future getToken() async {
fcmToken.getToken().then((token) {
// Log.print('token: ${token}');
box.write(
BoxName.tokenDriver, EncryptionHelper.instance.encryptData(token!));
box.write(BoxName.tokenDriver, (token!));
});
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
@@ -409,8 +408,7 @@ class FirebaseMessagesController extends GetxController {
var encryptedKey = await storage.read(key: 'FCM_PRIVATE_KEY');
// Log.print('encryptedKey: ${encryptedKey}');
if (encryptedKey != null) {
serviceAccountKeyJson =
EncryptionHelper.instance.decryptData(encryptedKey);
serviceAccountKeyJson = (encryptedKey);
// Log.print('serviceAccountKeyJson: ${serviceAccountKeyJson}');
} else {
print('🔴 Error: FCM_PRIVATE_KEY not found in Secure Storage');

View File

@@ -66,12 +66,12 @@ class CRUD {
return 'token_expired'; // Return a specific value for token expiration
} else {
// Other 401 errors
addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401');
// addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401');
return 'failure';
}
} else {
addError('Non-200 response code: ${response.statusCode}',
'crud().post - Other');
// addError('Non-200 response code: ${response.statusCode}',
// 'crud().post - Other');
return 'failure';
}
}
@@ -96,7 +96,7 @@ class CRUD {
},
);
// print(response.request);
// Log.print('response.request: ${response.request}');
// // Log.print('response.request: ${response.request}');
// Log.print('response.body: ${response.body}');
// print(payload);
if (response.statusCode == 200) {
@@ -117,12 +117,12 @@ class CRUD {
return 'token_expired'; // Return a specific value for token expiration
} else {
// Other 401 errors
addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401');
// addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401');
return 'failure';
}
} else {
addError('Non-200 response code: ${response.statusCode}',
'crud().post - Other');
// addError('Non-200 response code: ${response.statusCode}',
// 'crud().post - Other');
return 'failure';
}
}
@@ -157,7 +157,7 @@ class CRUD {
return jsonData['status'];
}
} catch (e) {
addError(e.toString(), 'crud().post - JSON decoding');
// addError(e.toString(), 'crud().post - JSON decoding');
return 'failure';
}
} else if (response.statusCode == 401) {
@@ -168,16 +168,16 @@ class CRUD {
return 'token_expired'; // Return a specific value for token expiration
} else {
// Other 401 errors
addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401');
// addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401');
return 'failure';
}
} else {
addError('Non-200 response code: ${response.statusCode}',
'crud().post - Other');
// addError('Non-200 response code: ${response.statusCode}',
// 'crud().post - Other');
return 'failure';
}
} catch (e) {
addError('HTTP request error: $e', 'crud().post - HTTP');
// addError('HTTP request error: $e', 'crud().post - HTTP');
return 'failure';
}
}
@@ -215,7 +215,7 @@ class CRUD {
return jsonData['status'];
}
} catch (e) {
addError(e.toString(), url);
// addError(e.toString(), url);
return 'failure';
}
} else if (response.statusCode == 401) {
@@ -238,16 +238,16 @@ class CRUD {
return 'token_expired'; // Return a specific value for token expiration
} else {
// Other 401 errors
addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401');
// addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401');
return 'failure';
}
} else {
addError('Non-200 response code: ${response.statusCode}',
'crud().post - Other');
// addError('Non-200 response code: ${response.statusCode}',
// 'crud().post - Other');
return 'failure';
}
} catch (e) {
addError('HTTP request error: $e', 'crud().post - HTTP');
// addError('HTTP request error: $e', 'crud().post - HTTP');
return 'failure';
}
}

View File

@@ -28,9 +28,9 @@ Future<String> faceDetector() async {
request.body = json.encode({
"url1":
"${AppLink.seferCairoServer}/card_image/id_front-${EncryptionHelper.instance.decryptData(box.read(BoxName.driverID))}.jpg",
"${AppLink.seferCairoServer}/card_image/id_front-${(box.read(BoxName.driverID))}.jpg",
"url2":
"https://api.sefer.live/sefer/card_image/face_detect-${EncryptionHelper.instance.decryptData(box.read(BoxName.driverID))}.jpg"
"https://api.sefer.live/sefer/card_image/face_detect-${(box.read(BoxName.driverID))}.jpg"
});
print('request.body: ${request.body}');
request.headers.addAll(headers);

View File

@@ -1,7 +1,6 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'dart:convert';
import 'package:crypto/crypto.dart';
@@ -13,8 +12,6 @@ import 'package:sefer_driver/controller/auth/captin/login_captin_controller.dart
import 'package:sefer_driver/controller/firebase/firbase_messge.dart';
import 'package:sefer_driver/controller/firebase/local_notification.dart';
import 'package:sefer_driver/controller/functions/crud.dart';
import 'package:sefer_driver/controller/functions/device_info.dart';
import 'package:sefer_driver/controller/notification/notification_captain_controller.dart';
import 'package:sefer_driver/main.dart';
import 'package:sefer_driver/views/home/Captin/home_captain/home_captin.dart';
import 'package:sefer_driver/views/widgets/error_snakbar.dart';
@@ -397,16 +394,13 @@ class AI extends GetxController {
update();
var payload = {
'first_name': EncryptionHelper.instance.encryptData(
responseNonIdCardFront['full_name'].toString().split(' ')[0]) ??
'Not specified',
'last_name': EncryptionHelper.instance.encryptData(
responseNonIdCardFront['full_name'].toString().split(' ').last) ??
'Not specified',
'email': EncryptionHelper.instance
.encryptData(box.read(BoxName.emailDriver))
?.toString() ??
'Not specified',
'first_name':
(responseNonIdCardFront['full_name'].toString().split(' ')[0]) ??
'Not specified',
'last_name':
(responseNonIdCardFront['full_name'].toString().split(' ').last) ??
'Not specified',
'email': (box.read(BoxName.emailDriver))?.toString() ?? 'Not specified',
'phone': box.read(BoxName.phoneDriver)?.toString() ?? 'Not specified',
'id': box.read(BoxName.driverID)?.toString() ?? 'Not specified',
'password':
@@ -416,16 +410,13 @@ class AI extends GetxController {
.passwordController
.text
.toString(),
'gender': EncryptionHelper.instance
.encryptData(responseNonIdCardFront['gender'].toString()) ??
'Not specified',
'gender':
(responseNonIdCardFront['gender'].toString()) ?? 'Not specified',
'license_type': 'Foreign',
'national_number': EncryptionHelper.instance
.encryptData(responseNonIdCardFront['passport_no'].toString()) ??
'Not specified',
'name_arabic': EncryptionHelper.instance
.encryptData(responseNonIdCardFront['full_name'].toString()) ??
'Not specified',
'national_number':
(responseNonIdCardFront['passport_no'].toString()) ?? 'Not specified',
'name_arabic':
(responseNonIdCardFront['full_name'].toString()) ?? 'Not specified',
'name_english': 'Not specified',
'issue_date':
responseNonIdCardBack['issueDate']?.toString() ?? 'Not specified',
@@ -437,31 +428,23 @@ class AI extends GetxController {
? responseIdEgyptDriverLicense['license_categories'].join(', ')
: responseIdEgyptDriverLicense['license_categories']?.toString() ??
'Not specified',
'address': EncryptionHelper.instance
.encryptData(responseNonIdCardFront['address'].toString()) ??
'Not specified',
'card_id': EncryptionHelper.instance
.encryptData(responseNonIdCardFront['card_id'].toString()) ??
'Not specified',
'occupation': EncryptionHelper.instance
.encryptData(responseNonIdCardBack['workStatus'].toString()) ??
'Not specified',
'address':
(responseNonIdCardFront['address'].toString()) ?? 'Not specified',
'card_id':
(responseNonIdCardFront['card_id'].toString()) ?? 'Not specified',
'occupation':
(responseNonIdCardBack['workStatus'].toString()) ?? 'Not specified',
'education': 'Not specified',
'licenseIssueDate':
responseNonIdCardBack['issueDate']?.toString() ?? 'Not specified',
'religion': EncryptionHelper.instance
.encryptData(responseNonIdCardFront['country'].toString()) ??
'Not specified',
'religion':
(responseNonIdCardFront['country'].toString()) ?? 'Not specified',
'status': 'yet',
'birthdate': EncryptionHelper.instance
.encryptData(responseNonIdCardFront['birthdate'].toString()) ??
'Not specified',
'birthdate':
(responseNonIdCardFront['birthdate'].toString()) ?? 'Not specified',
'maritalStatus': 'Not specified',
'site': EncryptionHelper.instance
.encryptData(responseNonIdCardFront['address'].toString()) ??
'Not specified',
'employmentType': EncryptionHelper.instance
.encryptData(responseNonIdCardBack['residencyType'].toString()) ??
'site': (responseNonIdCardFront['address'].toString()) ?? 'Not specified',
'employmentType': (responseNonIdCardBack['residencyType'].toString()) ??
'Not specified',
};
@@ -517,32 +500,22 @@ class AI extends GetxController {
String hashedPassword = shortHash(pass);
var payload = {
'first_name': EncryptionHelper.instance.encryptData(
responseIdEgyptDriverLicense['firstName'].toString()) ??
'first_name': (responseIdEgyptDriverLicense['firstName'].toString()) ??
'Not specified',
'last_name': EncryptionHelper.instance.encryptData(
responseIdEgyptDriverLicense['lastName'].toString()) ??
'Not specified',
'email': EncryptionHelper.instance
.encryptData(box.read(BoxName.emailDriver))
.toString() ??
'last_name': (responseIdEgyptDriverLicense['lastName'].toString()) ??
'Not specified',
'email': (box.read(BoxName.emailDriver)).toString() ?? 'Not specified',
'phone': box.read(BoxName.phoneDriver)?.toString() ?? 'Not specified',
'id': box.read(BoxName.driverID)?.toString() ?? 'Not specified',
'password': hashedPassword.toString(),
'gender': EncryptionHelper.instance
.encryptData(responseIdEgyptBack['gender'].toString()) ??
'Not specified',
'license_type': EncryptionHelper.instance.encryptData(
responseIdEgyptDriverLicense['license_type'].toString()) ??
'Not specified',
'national_number': EncryptionHelper.instance
.encryptData(responseIdEgyptBack['nationalID'].toString()) ??
'Not specified',
'name_arabic': EncryptionHelper.instance
.encryptData(responseIdEgyptDriverLicense['name_arabic'].toString()),
'name_english': EncryptionHelper.instance
.encryptData(responseIdEgyptDriverLicense['name_english'].toString()),
'gender': (responseIdEgyptBack['gender'].toString()) ?? 'Not specified',
'license_type':
(responseIdEgyptDriverLicense['license_type'].toString()) ??
'Not specified',
'national_number':
(responseIdEgyptBack['nationalID'].toString()) ?? 'Not specified',
'name_arabic': (responseIdEgyptDriverLicense['name_arabic'].toString()),
'name_english': (responseIdEgyptDriverLicense['name_english'].toString()),
'issue_date': responseIdEgyptDriverLicense['issue_date']?.toString() ??
'Not specified',
'expiry_date': responseIdEgyptDriverLicense['expiry_date']?.toString() ??
@@ -552,36 +525,29 @@ class AI extends GetxController {
? responseIdEgyptDriverLicense['license_categories'].join(', ')
: responseIdEgyptDriverLicense['license_categories']?.toString() ??
'Not specified',
'address': EncryptionHelper.instance
.encryptData(responseIdEgyptFront['address'].toString()) ??
'Not specified',
'card_id': EncryptionHelper.instance
.encryptData(responseIdEgyptFront['card_id'].toString()) ??
'Not specified',
'occupation': EncryptionHelper.instance
.encryptData(responseIdEgyptBack['occupation'].toString()) ??
'Not specified',
'education': EncryptionHelper.instance
.encryptData(responseIdEgyptBack['occupation'].toString()) ??
'Not specified',
'address':
(responseIdEgyptFront['address'].toString()) ?? 'Not specified',
'card_id':
(responseIdEgyptFront['card_id'].toString()) ?? 'Not specified',
'occupation':
(responseIdEgyptBack['occupation'].toString()) ?? 'Not specified',
'education':
(responseIdEgyptBack['occupation'].toString()) ?? 'Not specified',
'licenseIssueDate':
responseIdEgyptDriverLicense['issue_date'].toString() ??
'Not specified',
'religion': EncryptionHelper.instance
.encryptData(responseIdEgyptBack['religion'].toString()) ??
'Not specified',
'religion':
(responseIdEgyptBack['religion'].toString()) ?? 'Not specified',
'status': 'yet',
'birthdate': EncryptionHelper.instance.encryptData(extractDOB(
'birthdate': (extractDOB(
responseIdEgyptDriverLicense['national_number'].toString())),
'maritalStatus': EncryptionHelper.instance
.encryptData(responseIdEgyptBack['maritalStatus'].toString()) ??
'Not specified',
'site': EncryptionHelper.instance.encryptData(
responseIdEgyptDriverLicense['address'].toString()) ??
'Not specified',
'employmentType': EncryptionHelper.instance.encryptData(
responseIdEgyptDriverLicense['employmentType'].toString()) ??
'maritalStatus':
(responseIdEgyptBack['maritalStatus'].toString()) ?? 'Not specified',
'site': (responseIdEgyptDriverLicense['address'].toString()) ??
'Not specified',
'employmentType':
(responseIdEgyptDriverLicense['employmentType'].toString()) ??
'Not specified',
};
try {
@@ -624,8 +590,7 @@ class AI extends GetxController {
var res = await CRUD().post(link: AppLink.addCriminalDocuments, payload: {
"driverId": box.read(BoxName.driverID),
"IssueDate": responseCriminalRecordEgypt['IssueDate'],
"InspectionResult": EncryptionHelper.instance
.encryptData(responseCriminalRecordEgypt['InspectionResult']),
"InspectionResult": (responseCriminalRecordEgypt['InspectionResult']),
});
if (res != 'failure') {
mySnackbarSuccess('uploaded sucssefuly'.tr);
@@ -639,19 +604,16 @@ class AI extends GetxController {
var res = await CRUD().post(link: AppLink.addRegisrationCar, payload: {
'driverID': box.read(BoxName.driverID),
'vin': responseIdCardDriverEgyptBack['chassis'].toString(),
'car_plate': EncryptionHelper.instance.encryptData(
responseIdCardDriverEgyptFront['car_plate'].toString()),
'car_plate': (responseIdCardDriverEgyptFront['car_plate'].toString()),
'make': (responseIdCardDriverEgyptBack['make'].toString()),
'model': (responseIdCardDriverEgyptBack['model']),
'year': responseIdCardDriverEgyptBack['year'].toString(),
'expiration_date':
responseIdCardDriverEgyptFront['LicenseExpirationDate'].toString(),
'color': responseIdCardDriverEgyptBack['color'],
'owner': EncryptionHelper.instance
.encryptData(responseIdCardDriverEgyptFront['owner']),
'owner': (responseIdCardDriverEgyptFront['owner']),
'color_hex': responseIdCardDriverEgyptBack['color_hex'].toString(),
'address': EncryptionHelper.instance
.encryptData(responseIdCardDriverEgyptFront['address'].toString()),
'address': (responseIdCardDriverEgyptFront['address'].toString()),
'displacement': responseIdCardDriverEgyptBack['engine'].toString(),
'fuel': responseIdCardDriverEgyptBack['fuel'].toString(),
'registration_date':
@@ -669,8 +631,8 @@ class AI extends GetxController {
payload: {
'driverID': box.read(BoxName.driverID),
'vin': responseIdCardDriverEgyptBack['chassis'].toString(),
'car_plate': EncryptionHelper.instance.encryptData(
responseIdCardDriverEgyptFront['car_plate'].toString()),
'car_plate':
(responseIdCardDriverEgyptFront['car_plate'].toString()),
'make': (responseIdCardDriverEgyptBack['make'].toString()),
'model': (responseIdCardDriverEgyptBack['model']),
'year': responseIdCardDriverEgyptBack['year'].toString(),
@@ -678,12 +640,10 @@ class AI extends GetxController {
responseIdCardDriverEgyptFront['LicenseExpirationDate']
.toString(),
'color': responseIdCardDriverEgyptBack['color'],
'owner': EncryptionHelper.instance
.encryptData(responseIdCardDriverEgyptFront['owner']),
'owner': (responseIdCardDriverEgyptFront['owner']),
'color_hex':
responseIdCardDriverEgyptBack['color_hex'].toString(),
'address': EncryptionHelper.instance.encryptData(
responseIdCardDriverEgyptFront['address'].toString()),
'address': (responseIdCardDriverEgyptFront['address'].toString()),
'displacement':
responseIdCardDriverEgyptBack['engine'].toString(),
'fuel': responseIdCardDriverEgyptBack['fuel'].toString(),
@@ -695,8 +655,8 @@ class AI extends GetxController {
payload: {
'driverID': box.read(BoxName.driverID),
'vin': responseIdCardDriverEgyptBack['chassis'].toString(),
'car_plate': EncryptionHelper.instance.encryptData(
responseIdCardDriverEgyptFront['car_plate'].toString()),
'car_plate':
(responseIdCardDriverEgyptFront['car_plate'].toString()),
'make': (responseIdCardDriverEgyptBack['make'].toString()),
'model': (responseIdCardDriverEgyptBack['model']),
'year': responseIdCardDriverEgyptBack['year'].toString(),
@@ -704,12 +664,10 @@ class AI extends GetxController {
responseIdCardDriverEgyptFront['LicenseExpirationDate']
.toString(),
'color': responseIdCardDriverEgyptBack['color'],
'owner': EncryptionHelper.instance
.encryptData(responseIdCardDriverEgyptFront['owner']),
'owner': (responseIdCardDriverEgyptFront['owner']),
'color_hex':
responseIdCardDriverEgyptBack['color_hex'].toString(),
'address': EncryptionHelper.instance.encryptData(
responseIdCardDriverEgyptFront['address'].toString()),
'address': (responseIdCardDriverEgyptFront['address'].toString()),
'displacement':
responseIdCardDriverEgyptBack['engine'].toString(),
'fuel': responseIdCardDriverEgyptBack['fuel'].toString(),

View File

@@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:math';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
@@ -7,7 +8,6 @@ import 'package:location/location.dart';
import '../../constant/box_name.dart';
import '../../constant/links.dart';
import '../../main.dart';
import '../../print.dart';
import '../home/captin/home_captain_controller.dart';
import '../home/payment/captain_wallet_controller.dart';
import 'crud.dart';
@@ -18,64 +18,37 @@ class LocationController extends GetxController {
late Location location = Location();
bool isLoading = false;
late double heading = 0;
late double accuracy = 0;
late double previousTime = 0;
late double latitude;
late double totalDistance = 0;
late double longitude;
late DateTime time;
late double speed = 0;
late double speedAccuracy = 0;
late double headingAccuracy = 0;
bool isActive = false;
late LatLng myLocation = LatLng(0, 0); // Default value
late LatLng myLocation = LatLng(0, 0);
String totalPoints = '0';
LocationData? get currentLocation => _currentLocation;
Timer? _locationTimer;
LatLng? _lastSavedPosition;
@override
void onInit() async {
super.onInit();
location = Location(); // Initialize the location object
location = Location();
await location.changeSettings(
accuracy: LocationAccuracy.high,
interval: 5000, // 5 seconds
distanceFilter: 0);
await getLocation(); // Fetch the location immediately
await startLocationUpdates(); // Start periodic location updates
accuracy: LocationAccuracy.high, interval: 5000, distanceFilter: 0);
await getLocation();
await startLocationUpdates();
totalPoints = Get.put(CaptainWalletController()).totalPoints.toString();
isActive = Get.put(HomeCaptainController()).isActive;
}
// String getLocationArea(double latitude, double longitude) {
// if (latitude >= 29.918901 &&
// latitude <= 30.198857 &&
// longitude >= 31.215009 &&
// longitude <= 31.532186) {
// return 'Cairo';
// } else if (latitude >= 29.904975 &&
// latitude <= 30.143372 &&
// longitude >= 30.787030 &&
// longitude <= 31.215009) {
// return 'Giza';
// } else if (latitude >= 30.396286 &&
// latitude <= 31.654458 &&
// longitude >= 29.041139 &&
// longitude <= 32.626259) {
// return 'Alexandria';
// } else {
// return 'Cairo';
// }
// }
String getLocationArea(double latitude, double longitude) {
final locations = box.read(BoxName.locationName) ?? [];
for (final location in locations) {
final locationData = location as Map<String, dynamic>;
// Debugging: Print location data
// Convert string values to double
final minLatitude =
double.tryParse(locationData['min_latitude'].toString()) ?? 0.0;
final maxLatitude =
@@ -85,21 +58,15 @@ class LocationController extends GetxController {
final maxLongitude =
double.tryParse(locationData['max_longitude'].toString()) ?? 0.0;
// Debugging: Print converted values
// 'Converted Values: minLatitude=$minLatitude, maxLatitude=$maxLatitude, minLongitude=$minLongitude, maxLongitude=$maxLongitude');
if (latitude >= minLatitude &&
latitude <= maxLatitude &&
longitude >= minLongitude &&
longitude <= maxLongitude) {
box.write(BoxName.serverChosen,
EncryptionHelper.instance.decryptData(locationData['server_link']));
// 'locationData----server_link: ${locationData['server_link']}');
box.write(BoxName.serverChosen, (locationData['server_link']));
return locationData['name'];
}
}
// Default case
box.write(BoxName.serverChosen, AppLink.seferCairoServer);
return 'Cairo';
}
@@ -108,10 +75,6 @@ class LocationController extends GetxController {
Future<void> startLocationUpdates() async {
if (box.read(BoxName.driverID) != null) {
if (location == null) {
location = Location(); // Ensure location is initialized
}
_locationTimer =
Timer.periodic(const Duration(seconds: 5), (timer) async {
try {
@@ -121,7 +84,7 @@ class LocationController extends GetxController {
if (isActive && double.parse(totalPoints) > -300) {
await getLocation();
if (myLocation == null) return;
if (myLocation.latitude == 0 && myLocation.longitude == 0) return;
String area =
getLocationArea(myLocation.latitude, myLocation.longitude);
@@ -132,22 +95,35 @@ class LocationController extends GetxController {
'longitude': myLocation.longitude.toString(),
'heading': heading.toString(),
'speed': (speed * 3.6).toStringAsFixed(1),
'distance': totalDistance == 0 && (speed * 3.6) < 5
? '0.0'
: totalDistance < 7
? totalDistance.toStringAsFixed(3)
: totalDistance.toStringAsFixed(1),
'distance': totalDistance.toStringAsFixed(2),
'status': box.read(BoxName.statusDriverLocation) ?? 'off',
};
// 🔁 كل 5 ثواني - تحديث الموقع
// ✅ تحديث للسيرفر
await CRUD().post(
link:
box.read(BoxName.serverChosen) + '/ride/location/update.php',
payload: payload,
);
// 📍 كل 60 ثانية - إدخال جديد
// ✅ تخزين في SQLite فقط إذا الرحلة On + تحرك أكثر من 10 متر
if ((box.read(BoxName.statusDriverLocation) ?? 'off') == 'on') {
if (_lastSavedPosition == null ||
_calculateDistanceInMeters(_lastSavedPosition!, myLocation) >=
10) {
await sql.insertData({
'driver_id': box.read(BoxName.driverID).toString(),
'latitude': myLocation.latitude,
'longitude': myLocation.longitude,
'created_at': DateTime.now().toIso8601String(),
'updated_at': DateTime.now().toIso8601String(),
}, 'car_locations');
_lastSavedPosition = myLocation;
}
}
// ✅ إدخال للسيرفر كل دقيقة
_insertCounter++;
if (_insertCounter >= 12) {
_insertCounter = 0;
@@ -157,14 +133,14 @@ class LocationController extends GetxController {
);
}
// 🔄 تحديث الكاميرا
// تحديث الكاميرا
Get.find<HomeCaptainController>()
.mapHomeCaptainController
?.animateCamera(
CameraUpdate.newLatLng(
LatLng(
Get.find<LocationController>().myLocation.latitude,
Get.find<LocationController>().myLocation.longitude,
myLocation.latitude,
myLocation.longitude,
),
),
);
@@ -181,30 +157,18 @@ class LocationController extends GetxController {
}
Future<void> getLocation() async {
if (location == null) {
location = Location(); // تأكد من أن `Location` مهيأ
}
bool serviceEnabled;
PermissionStatus permissionGranted;
serviceEnabled = await location.serviceEnabled();
bool serviceEnabled = await location.serviceEnabled();
if (!serviceEnabled) {
serviceEnabled = await location.requestService();
if (!serviceEnabled) {
return;
}
if (!serviceEnabled) return;
}
permissionGranted = await location.hasPermission();
PermissionStatus permissionGranted = await location.hasPermission();
if (permissionGranted == PermissionStatus.denied) {
permissionGranted = await location.requestPermission();
if (permissionGranted != PermissionStatus.granted) {
return;
}
if (permissionGranted != PermissionStatus.granted) return;
}
/// **تجنب استدعاء `getLocation()` مباشرة على الـ Main Thread**
Future.delayed(Duration(milliseconds: 500), () async {
try {
LocationData _locationData = await location.getLocation();
@@ -212,80 +176,27 @@ class LocationController extends GetxController {
myLocation =
LatLng(_locationData.latitude!, _locationData.longitude!);
} else {
myLocation = LatLng(0, 0); // Default value
myLocation = LatLng(0, 0);
}
speed = _locationData.speed ?? 0;
heading = _locationData.heading ?? 0;
if (Get.find<HomeCaptainController>().rideId == 'rideId') {
if (previousTime > 0) {
double distance = calculateDistanceInKmPerHour(
previousTime, _locationData.time, speed);
totalDistance += distance;
}
previousTime = _locationData.time ?? 0;
}
update();
} catch (e) {
print("Error getting location: $e");
}
});
}
// Future<void> getLocation() async {
// if (location == null) {
// location = Location(); // Ensure location is initialized
// }
// bool serviceEnabled;
// PermissionStatus permissionGranted;
// serviceEnabled = await location.serviceEnabled();
// if (!serviceEnabled) {
// serviceEnabled = await location.requestService();
// if (!serviceEnabled) {
// return;
// }
// }
// permissionGranted = await location.hasPermission();
// if (permissionGranted == PermissionStatus.denied) {
// permissionGranted = await location.requestPermission();
// if (permissionGranted != PermissionStatus.granted) {
// return;
// }
// }
// LocationData _locationData = await location.getLocation();
// if (_locationData.latitude != null && _locationData.longitude != null) {
// myLocation = LatLng(_locationData.latitude!, _locationData.longitude!);
// } else {
// myLocation = LatLng(0, 0); // Default value
// }
// speed = _locationData.speed ?? 0;
// heading = _locationData.heading ?? 0;
// if (Get.find<HomeCaptainController>().rideId == 'rideId') {
// if (previousTime > 0) {
// double distance = calculateDistanceInKmPerHour(
// previousTime, _locationData.time, speed);
// totalDistance += distance;
// }
// previousTime = _locationData.time ?? 0;
// }
// update();
// }
double calculateDistanceInKmPerHour(
double? startTime, double? endTime, double speedInMetersPerSecond) {
double timeDifferenceInHours =
(endTime ?? 0 - startTime! ?? 0) / 1000 / 3600;
double speedInKmPerHour = speedInMetersPerSecond * 3.6;
double distanceInKilometers = speedInKmPerHour * timeDifferenceInHours;
double distanceInMeters = distanceInKilometers * 1000;
return distanceInMeters < 5 ? 0 : distanceInKilometers;
double _calculateDistanceInMeters(LatLng start, LatLng end) {
const p = 0.017453292519943295;
final a = 0.5 -
cos((end.latitude - start.latitude) * p) / 2 +
cos(start.latitude * p) *
cos(end.latitude * p) *
(1 - cos((end.longitude - start.longitude) * p)) /
2;
return 12742 * 1000 * asin(sqrt(a)); // meters
}
}

View File

@@ -75,9 +75,7 @@ class LogOutController extends GetxController {
confirm: MyElevatedButton(
title: 'Delete'.tr,
onPressed: () async {
if (checkTxtController.text ==
EncryptionHelper.instance
.decryptData(box.read(BoxName.nameDriver))) {
if (checkTxtController.text == (box.read(BoxName.nameDriver))) {
// deletecaptainAccount();
var id = await checkBeforeDelete();

View File

@@ -197,8 +197,8 @@ class DeviceHelper {
// Generate and return the encrypted fingerprint
final String fingerprint = '${deviceId}_${deviceModel}_$osVersion';
print(EncryptionHelper.instance.encryptData(fingerprint));
return EncryptionHelper.instance.encryptData(fingerprint);
// print(EncryptionHelper.instance.encryptData(fingerprint));
return (fingerprint);
} catch (e) {
throw Exception('Failed to generate device fingerprint');
}
@@ -247,15 +247,15 @@ class SecurityHelper {
await box.write('isTampered', isTampered); // Use await
await box.write('isJailBroken', isJailBroken); // Use await
// debugPrint("Security Check Results:");
// debugPrint("isNotTrust: $isNotTrust");
// debugPrint("isJailBroken: $isJailBroken");
// debugPrint("isRealDevice: $isRealDevice");
// debugPrint("isOnExternalStorage: $isOnExternalStorage");
// debugPrint("checkForIssues: $checkForIssues");
// debugPrint("isDevMode: $isDevMode");
// debugPrint("isTampered: $isTampered");
// debugPrint("Bundle ID: $bundleId"); // Print the bundle ID
debugPrint("Security Check Results:");
debugPrint("isNotTrust: $isNotTrust");
debugPrint("isJailBroken: $isJailBroken");
debugPrint("isRealDevice: $isRealDevice");
debugPrint("isOnExternalStorage: $isOnExternalStorage");
debugPrint("checkForIssues: $checkForIssues");
debugPrint("isDevMode: $isDevMode");
debugPrint("isTampered: $isTampered");
debugPrint("Bundle ID: $bundleId"); // Print the bundle ID
// Check for security risks and potentially show a warning
if (isJailBroken || isRealDevice == false || isTampered) {

View File

@@ -40,6 +40,7 @@ class AppInitializer {
Future<void> initializeApp() async {
if (box.read(BoxName.jwt) == null) {
Log.print('box.read(BoxName.jwt): ${box.read(BoxName.jwt)}');
await LoginDriverController().getJWT();
} else {
bool isTokenExpired = JwtDecoder.isExpired(X
@@ -74,16 +75,11 @@ class AppInitializer {
links = List<Map<String, dynamic>>.from(jsonDecode(res)['message']);
await box.write(BoxName.locationName, links);
await box.write(BoxName.basicLink,
EncryptionHelper.instance.decryptData(links[0]['server_link']));
await box.write(links[2]['name'],
EncryptionHelper.instance.decryptData(links[2]['server_link']));
await box.write(links[1]['name'],
EncryptionHelper.instance.decryptData(links[3]['server_link']));
await box.write(links[3]['name'],
EncryptionHelper.instance.decryptData(links[1]['server_link']));
await box.write(BoxName.paymentLink,
EncryptionHelper.instance.decryptData(links[4]['server_link']));
await box.write(BoxName.basicLink, (links[0]['server_link']));
await box.write(links[2]['name'], (links[2]['server_link']));
await box.write(links[1]['name'], (links[3]['server_link']));
await box.write(links[3]['name'], (links[1]['server_link']));
await box.write(BoxName.paymentLink, (links[4]['server_link']));
}
} catch (e) {}
}

View File

@@ -27,16 +27,9 @@ class SmsEgyptController extends GetxController {
}
}
Future<dynamic> sendSmsEgypt(String phone, otp) async {
Future<dynamic> sendSmsEgypt(String phone) async {
String sender = await getSender();
var body = jsonEncode({
"username": 'Sefer',
"password": AK.smsPasswordEgypt,
"message": "${AppInformation.appName} app code is $otp\ncopy it to app",
"language": box.read(BoxName.lang) == 'en' ? "e" : 'r',
"sender": sender, //"Sefer Egy", // todo add sefer sender name
"receiver": "2$phone"
});
var body = jsonEncode({"receiver": "2$phone"});
var res = await http.post(
Uri.parse(AppLink.sendSms),
@@ -46,19 +39,16 @@ class SmsEgyptController extends GetxController {
if (jsonDecode(res.body)['message'].toString() != "Success") {
await CRUD().post(link: AppLink.updatePhoneInvalidSMS, payload: {
"phone_number": EncryptionHelper.instance.encryptData(
'+2${Get.find<RegisterCaptainController>().phoneController.text}')
"phone_number":
('+2${Get.find<RegisterCaptainController>().phoneController.text}')
});
box.write(
BoxName.phoneDriver,
EncryptionHelper.instance.encryptData(
'+2${Get.find<RegisterCaptainController>().phoneController.text}'));
box.write(BoxName.phoneDriver,
('+2${Get.find<RegisterCaptainController>().phoneController.text}'));
box.write(BoxName.phoneVerified, '1');
await Get.put(LoginDriverController()).loginWithGoogleCredential(
box.read(BoxName.driverID).toString(),
EncryptionHelper.instance
.encryptData(box.read(BoxName.emailDriver).toString()),
(box.read(BoxName.emailDriver).toString()),
);
} else {
Get.defaultDialog(

View File

@@ -419,10 +419,8 @@ class ImageController extends GetxController {
await uploadImage(
compressedImage,
{
'driverID': EncryptionHelper.instance
.decryptData(box.read(BoxName.driverID)) ??
EncryptionHelper.instance
.decryptData(box.read(BoxName.passengerID)),
'driverID':
(box.read(BoxName.driverID)) ?? (box.read(BoxName.passengerID)),
'imageType': imageType
},
link,
@@ -461,8 +459,7 @@ class ImageController extends GetxController {
'image',
stream,
length,
filename:
'${EncryptionHelper.instance.decryptData(box.read(BoxName.driverID))}.jpg',
filename: '${(box.read(BoxName.driverID))}.jpg',
),
);
data.forEach((key, value) {

View File

@@ -0,0 +1,115 @@
import 'dart:convert';
import 'dart:math';
import 'package:get/get.dart';
import 'package:sefer_driver/constant/box_name.dart';
import 'package:sefer_driver/constant/links.dart';
import 'package:sefer_driver/controller/functions/crud.dart';
import '../../../constant/table_names.dart';
import '../../../main.dart';
class DriverBehaviorController extends GetxController {
Future<List<Map<String, dynamic>>> getAllData() async {
return await sql.getAllData(TableName.behavior);
}
var isLoading = false.obs;
var overallScore = 100.0.obs;
var lastTrips = [].obs;
Future<void> fetchDriverBehavior() async {
isLoading.value = true;
try {
final response = await CRUD().get(
link: AppLink.get_driver_behavior,
payload: {"driver_id": box.read(BoxName.driverID).toString()},
);
if (response != 'failure') {
final json = jsonDecode(response.body);
overallScore.value =
double.parse(json['data']['overall_behavior_score'].toString());
lastTrips.value = json['data']['last_10_trips'];
} else {
// Get.snackbar("Error", json['message'] ?? "Unknown error");
}
} catch (e) {
Get.snackbar("Error", "Exception: $e");
} finally {
isLoading.value = false;
}
}
Future<Map<String, dynamic>> analyzeData() async {
final data = await getAllData();
if (data.isEmpty) return {};
double maxSpeed = 0;
double totalSpeed = 0;
int hardBrakes = 0;
double totalDistance = 0;
double? prevLat, prevLng;
for (var item in data) {
double speed = item['speed'] ?? 0;
double lat = item['lat'] ?? 0;
double lng = item['lng'] ?? 0;
double acc = item['acceleration'] ?? 0;
if (speed > maxSpeed) maxSpeed = speed;
totalSpeed += speed;
// ✅ Hard brake threshold
if (acc.abs() > 3.0) hardBrakes++;
// ✅ Distance between points
if (prevLat != null && prevLng != null) {
totalDistance += _calculateDistance(prevLat, prevLng, lat, lng);
}
prevLat = lat;
prevLng = lng;
}
double avgSpeed = totalSpeed / data.length;
double behaviorScore = 100 - (hardBrakes * 5) - ((maxSpeed > 100) ? 10 : 0);
behaviorScore = behaviorScore.clamp(0, 100);
return {
'max_speed': maxSpeed,
'avg_speed': avgSpeed,
'hard_brakes': hardBrakes,
'total_distance': totalDistance,
'behavior_score': behaviorScore,
};
}
Future<void> sendSummaryToServer(String driverId, String tripId) async {
final summary = await analyzeData();
if (summary.isEmpty) return;
final body = {
'driver_id': driverId,
'trip_id': tripId,
...summary,
};
CRUD().post(link: AppLink.saveBehavior, payload: (body));
await clearData();
}
Future<void> clearData() async {
await sql.deleteAllData(TableName.behavior);
}
double _calculateDistance(
double lat1, double lon1, double lat2, double lon2) {
const p = 0.017453292519943295;
final a = 0.5 -
cos((lat2 - lat1) * p) / 2 +
cos(lat1 * p) * cos(lat2 * p) * (1 - cos((lon2 - lon1) * p)) / 2;
return 12742 * asin(sqrt(a)); // distance in km
}
}

View File

@@ -31,8 +31,7 @@ class HelpController extends GetxController {
update();
var res = await CRUD().post(link: AppLink.addhelpCenter, payload: {
'driverID': box.read(BoxName.driverID).toString(),
'helpQuestion':
EncryptionHelper.instance.encryptData(helpQuestionController.text)
'helpQuestion': (helpQuestionController.text)
});
var d = jsonDecode(res);
isLoading = false;

View File

@@ -198,9 +198,7 @@ class HomeCaptainController extends GetxController {
controller.animateCamera(
CameraUpdate.newLatLng(Get.find<LocationController>().myLocation),
);
} else {
print("Controller is null, cannot proceed.");
}
} else {}
}
void savePeriod(Duration period) {
@@ -299,7 +297,6 @@ class HomeCaptainController extends GetxController {
// List<Map<String, dynamic>> results =
// await sql.getCustomQuery(customQuery);
// countRefuse = results[0]['count'].toString();
// print(countRefuse);
// update();
// if (int.parse(countRefuse) > 3) {
// box.write(BoxName.statusDriverLocation, 'on');
@@ -324,34 +321,34 @@ class HomeCaptainController extends GetxController {
addToken() async {
String? fingerPrint = await storage.read(key: BoxName.fingerPrint);
await CRUD().post(link: AppLink.addTokensDriver, payload: {
CRUD().post(link: AppLink.addTokensDriver, payload: {
'token': (box.read(BoxName.tokenDriver)),
'captain_id': (box.read(BoxName.driverID)).toString(),
'fingerPrint': (fingerPrint).toString()
});
await CRUD().post(
link: "${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php",
payload: {
'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString(),
'fingerPrint': (fingerPrint).toString()
});
await CRUD().post(
link: "${AppLink.seferGizaServer}/ride/firebase/addDriver.php",
payload: {
'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString(),
'fingerPrint': (fingerPrint).toString()
});
await CRUD().post(
// CRUD().post(
// link: "${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php",
// payload: {
// 'token': box.read(BoxName.tokenDriver),
// 'captain_id': box.read(BoxName.driverID).toString(),
// 'fingerPrint': (fingerPrint).toString()
// });
// CRUD().post(
// link: "${AppLink.seferGizaServer}/ride/firebase/addDriver.php",
// payload: {
// 'token': box.read(BoxName.tokenDriver),
// 'captain_id': box.read(BoxName.driverID).toString(),
// 'fingerPrint': (fingerPrint).toString()
// });
await CRUD().postWallet(
link: "${AppLink.seferPaymentServer}/ride/firebase/addDriver.php",
payload: {
'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString(),
'fingerPrint': (fingerPrint).toString()
});
MapDriverController().driverCallPassenger();
// MapDriverController().driverCallPassenger();
// box.write(BoxName.statusDriverLocation, 'off');
}

View File

@@ -1,6 +1,7 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:sefer_driver/controller/home/captin/behavior_controller.dart';
import 'package:sefer_driver/controller/home/captin/home_captain_controller.dart';
import 'package:sefer_driver/views/widgets/mydialoug.dart';
import 'package:bubble_head/bubble.dart';
@@ -183,9 +184,7 @@ class MapDriverController extends GetxController {
await CRUD().post(
link: "${AppLink.seferCairoServer}/ride/rides/update.php",
payload: {
"id": EncryptionHelper.instance
.encryptData(rideId)
.toString(), // Convert to String
"id": (rideId).toString(), // Convert to String
"status": 'CancelFromDriverAfterApply'
});
CRUD().postFromDialogue(
@@ -193,28 +192,22 @@ class MapDriverController extends GetxController {
payload: {
'driver_id': box.read(BoxName.driverID).toString(),
// box.read(BoxName.driverID).toString(),
'order_id':
EncryptionHelper.instance.encryptData(rideId).toString(),
'order_id': (rideId).toString(),
'status': 'CancelFromDriverAfterApply'
});
await CRUD().post(
link:
"${AppLink.seferCairoServer}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php",
payload: {
"order_id":
EncryptionHelper.instance.encryptData(rideId).toString(),
"order_id": (rideId).toString(),
"driver_id": box.read(BoxName.driverID).toString(),
"status": 'reject After Applied',
"notes": EncryptionHelper.instance
.encryptData(cancelTripCotroller.text)
.toString()
"notes": (cancelTripCotroller.text).toString()
});
if (AppLink.endPoint != AppLink.seferCairoServer) {
CRUD()
.post(link: "${AppLink.endPoint}/ride/rides/update.php", payload: {
"id": EncryptionHelper.instance
.encryptData(rideId)
.toString(), // Convert to String
"id": (rideId).toString(), // Convert to String
"status": 'CancelFromDriverAfterApply'
});
CRUD().postFromDialogue(
@@ -222,26 +215,22 @@ class MapDriverController extends GetxController {
payload: {
'driver_id': box.read(BoxName.driverID).toString(),
// box.read(BoxName.driverID).toString(),
'order_id':
EncryptionHelper.instance.encryptData(rideId).toString(),
'order_id': (rideId).toString(),
'status': 'CancelFromDriverAfterApply'
});
CRUD().post(
link:
"${AppLink.endPoint}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php",
payload: {
"order_id":
EncryptionHelper.instance.encryptData(rideId).toString(),
"order_id": (rideId).toString(),
"driver_id": box.read(BoxName.driverID).toString(),
"status": 'reject After Applied',
"notes": EncryptionHelper.instance
.encryptData(cancelTripCotroller.text)
.toString()
"notes": (cancelTripCotroller.text).toString()
});
}
sql.insertData({
'order_id': EncryptionHelper.instance.encryptData(rideId),
'order_id': (rideId),
'created_at': DateTime.now().toString(),
'driver_id': box.read(BoxName.driverID).toString(),
}, TableName.driverOrdersRefuse);
@@ -312,13 +301,13 @@ class MapDriverController extends GetxController {
await CRUD().post(
link: "${AppLink.seferCairoServer}/ride/rides/update.php",
payload: {
'id': EncryptionHelper.instance.encryptData(rideId),
'id': (rideId),
'driverGoToPassengerTime': DateTime.now().toString(),
'status': 'Applied'
});
if (AppLink.endPoint != AppLink.seferCairoServer) {
CRUD().post(link: "${AppLink.endPoint}/ride/rides/update.php", payload: {
'id': EncryptionHelper.instance.encryptData(rideId),
'id': (rideId),
'driverGoToPassengerTime': DateTime.now().toString(),
'status': 'Applied'
});
@@ -533,35 +522,35 @@ class MapDriverController extends GetxController {
: (distanceBetweenDriverAndPassengerWhenConfirm * .06) +
(5 * .06); //for Eygpt other like jordan .06 per minute
await CRUD().post(link: AppLink.updateRides, payload: {
'id': EncryptionHelper.instance.encryptData(rideId),
'id': (rideId),
'rideTimeStart': DateTime.now().toString(),
'status': 'CancelAfterWait',
});
CRUD().post(link: AppLink.addDriverOrder, payload: {
'driver_id': box.read(BoxName.driverID).toString(),
'order_id': EncryptionHelper.instance.encryptData(rideId).toString(),
'order_id': (rideId).toString(),
'status': 'CancelAfterWait'
});
if (AppLink.endPoint != AppLink.seferCairoServer) {
CRUD().post(link: "${AppLink.endPoint}/rides/update.php", payload: {
'id': EncryptionHelper.instance.encryptData(rideId),
'id': (rideId),
'rideTimeStart': DateTime.now().toString(),
'status': 'CancelAfterWait',
});
CRUD().post(link: "${AppLink.endPoint}/rides/update.php", payload: {
'driver_id': box.read(BoxName.driverID).toString(),
'order_id': EncryptionHelper.instance.encryptData(rideId).toString(),
'order_id': (rideId).toString(),
'status': 'CancelAfterWait'
});
}
var paymentTokenWait =
await generateTokenDriver(costOfWaiting5Minute.toString());
var res = await CRUD().post(link: AppLink.addDrivePayment, payload: {
'rideId': EncryptionHelper.instance.encryptData(rideId),
'rideId': (rideId),
'amount': (costOfWaiting5Minute.toString()),
'payment_method': 'wait-cancel',
'passengerID': EncryptionHelper.instance.encryptData(passengerId),
'passengerID': (passengerId),
'token': paymentTokenWait,
'driverID': box.read(BoxName.driverID).toString(),
});
@@ -569,7 +558,7 @@ class MapDriverController extends GetxController {
await generateTokenDriver(costOfWaiting5Minute.toString());
var res1 =
await CRUD().post(link: AppLink.addDriversWalletPoints, payload: {
'paymentID': 'rideId${EncryptionHelper.instance.encryptData(rideId)}',
'paymentID': 'rideId${(rideId)}',
'amount': (costOfWaiting5Minute).toStringAsFixed(0),
'paymentMethod': 'wait',
'token': paymentTokenWait1,
@@ -585,7 +574,7 @@ class MapDriverController extends GetxController {
var paymentTokenWaitPassenger1 =
await generateTokenPassenger((costOfWaiting5Minute * -1).toString());
await CRUD().post(link: AppLink.addPassengersWallet, payload: {
'passenger_id': EncryptionHelper.instance.encryptData(passengerId),
'passenger_id': (passengerId),
'balance': (costOfWaiting5Minute * -1).toString(),
'token': paymentTokenWaitPassenger1,
});
@@ -671,13 +660,13 @@ class MapDriverController extends GetxController {
// Prepare data for API calls
final nowString = DateTime.now().toString();
final basePayload = {
'id': EncryptionHelper.instance.encryptData(rideId),
'id': (rideId),
'rideTimeFinish': nowString,
'status': 'Finished',
'price': totalCost,
};
final driverOrderPayload = {
'order_id': EncryptionHelper.instance.encryptData(rideId.toString()),
'order_id': (rideId.toString()),
'status': 'Finished'
};
@@ -710,7 +699,7 @@ class MapDriverController extends GetxController {
paymentToken = await generateTokenPassenger(
((-1) * double.parse(paymentAmount)).toString());
futures.add(CRUD().post(link: AppLink.addPassengersWallet, payload: {
'passenger_id': EncryptionHelper.instance.encryptData(passengerId),
'passenger_id': (passengerId),
'balance': ((-1) * double.parse(paymentAmount)).toString(),
'token': paymentToken,
}));
@@ -718,11 +707,11 @@ class MapDriverController extends GetxController {
paymentToken = await generateTokenDriver(paymentAmount.toString());
futures.add(CRUD().post(link: AppLink.addDrivePayment, payload: {
'rideId': EncryptionHelper.instance.encryptData(rideId),
'rideId': (rideId),
'amount': paymentAmount,
'payment_method':
walletChecked == 'true' ? "${paymentMethod}Ride" : paymentMethod,
'passengerID': EncryptionHelper.instance.encryptData(passengerId),
'passengerID': (passengerId),
'token': paymentToken,
'driverID': box.read(BoxName.driverID).toString(),
}));
@@ -731,7 +720,7 @@ class MapDriverController extends GetxController {
final paymentToken1 = await generateTokenPassenger(
((-1) * double.parse(passengerWalletBurc)).toString());
futures.add(CRUD().post(link: AppLink.addPassengersWallet, payload: {
'passenger_id': EncryptionHelper.instance.encryptData(passengerId),
'passenger_id': (passengerId),
'token': paymentToken1,
'balance': ((-1) * double.parse(passengerWalletBurc)).toString()
}));
@@ -741,7 +730,7 @@ class MapDriverController extends GetxController {
final paymentToken2 =
await generateTokenDriver((pointsSubtraction).toStringAsFixed(0));
futures.add(CRUD().post(link: AppLink.addDriversWalletPoints, payload: {
'paymentID': 'rideId${EncryptionHelper.instance.encryptData(rideId)}',
'paymentID': 'rideId${(rideId)}',
'amount': (pointsSubtraction).toStringAsFixed(0),
'paymentMethod': paymentMethod,
'token': paymentToken2,
@@ -750,6 +739,7 @@ class MapDriverController extends GetxController {
// Wait for all independent API calls to complete
await Future.wait(futures);
Get.put(DriverBehaviorController()).sendSummaryToServer(driverId, rideId);
// Send notification (this likely depends on previous steps)
FirebaseMessagesController().sendNotificationToDriverMAP(
@@ -898,7 +888,7 @@ class MapDriverController extends GetxController {
var res = await CRUD().get(
link: "${AppLink.endPoint}/ride/driver_order/getOrderCancelStatus.php",
payload: {
'order_id': EncryptionHelper.instance.encryptData(rideId),
'order_id': (rideId),
}); //.then((value) {
var response = jsonDecode(res);
canelString = response['data']['status'];

View File

@@ -32,6 +32,7 @@ class DriverWalletHistoryController extends GetxController {
));
}
archive = jsonDecode(res)['message'];
isLoading = false;
update();
}

View File

@@ -157,11 +157,9 @@ class PaymentController extends GetxController {
paymentIntentClientSecret: clientSecret,
merchantDisplayName: AppInformation.appName,
billingDetails: BillingDetails(
name: EncryptionHelper.instance
.decryptData(box.read(BoxName.nameDriver)),
name: (box.read(BoxName.nameDriver)),
email: (box.read(BoxName.emailDriver)),
phone: EncryptionHelper.instance
.decryptData(box.read(BoxName.phoneDriver)),
phone: (box.read(BoxName.phoneDriver)),
address: Address(
city: 'city',
country: box.read(BoxName.countryCode), //'United States'

View File

@@ -133,13 +133,10 @@ class PaymobManager extends GetxController {
"amount_cents": amount,
"currency": currency,
"billing_data": {
"first_name":
EncryptionHelper.instance.decryptData(box.read(BoxName.nameDriver)),
"last_name": EncryptionHelper.instance
.decryptData(box.read(BoxName.lastNameDriver)),
"first_name": (box.read(BoxName.nameDriver)),
"last_name": (box.read(BoxName.lastNameDriver)),
"email": (box.read(BoxName.emailDriver)),
"phone_number": EncryptionHelper.instance
.decryptData(box.read(BoxName.phoneDriver)),
"phone_number": (box.read(BoxName.phoneDriver)),
"apartment": "NA",
"floor": "NA",
"street": "NA",

View File

@@ -227,8 +227,7 @@ class PaymobBillingData {
"email": (box.read(BoxName.emailDriver)),
"first_name": box.read(BoxName.nameDriver),
"last_name": box.read(BoxName.nameDriver),
"phone_number":
EncryptionHelper.instance.decryptData(box.read(BoxName.phoneDriver)),
"phone_number": (box.read(BoxName.phoneDriver)),
"apartment": apartment ?? "NA",
"floor": floor ?? "NA",
"building": building ?? "NA",

View File

@@ -43,9 +43,7 @@ class RatingController extends GetxController {
? box.read(BoxName.nameDriver)
: box.read(BoxName.name),
"email": (box.read(BoxName.emailDriver)).toString(),
"phone": EncryptionHelper.instance
.decryptData(box.read(BoxName.phoneDriver))
.toString(),
"phone": (box.read(BoxName.phoneDriver)).toString(),
"userId": box.read(BoxName.driverID),
"userType": "driver",
"rating": rating.toString(),

View File

@@ -183,7 +183,7 @@ class _MyAppState extends State<MyApp> {
String? key = (await storage.read(key: BoxName.payMobApikey));
if (key != null) {
String? apiKey = EncryptionHelper.instance.decryptData(key);
String? apiKey = (key);
if (apiKey != null) {
PaymobPayment.instance.initialize(
// Use .instance

View File

@@ -72,6 +72,16 @@ class DbSql {
faceDetectTimes INTEGER
)
''');
await db.execute('''
CREATE TABLE IF NOT EXISTS ${TableName.behavior}(
id INTEGER PRIMARY KEY AUTOINCREMENT,
speed REAL,
lat REAL,
lng REAL,
acceleration REAL,
timestamp TEXT
)
''');
await db.execute('''
CREATE TABLE IF NOT EXISTS ${TableName.captainNotification}(
id INTEGER PRIMARY KEY AUTOINCREMENT,

View File

@@ -95,17 +95,17 @@ class AiPage extends StatelessWidget {
Row(
children: [
Text(
'${'Name'.tr} :${EncryptionHelper.instance.decryptData(contentController.responseMap['first_name'])}',
'${'Name'.tr} :${(contentController.responseMap['first_name'])}',
style: AppStyle.subtitle,
),
Text(
' ${EncryptionHelper.instance.decryptData(contentController.responseMap['last_name'])}',
' ${(contentController.responseMap['last_name'])}',
style: AppStyle.subtitle,
),
],
),
Text(
'${'Name in arabic'.tr}: ${EncryptionHelper.instance.decryptData(contentController.responseMap['name_in_arabic'])}',
'${'Name in arabic'.tr}: ${(contentController.responseMap['name_in_arabic'])}',
style: AppStyle.title,
),
Text(
@@ -121,7 +121,7 @@ class AiPage extends StatelessWidget {
MainAxisAlignment.spaceBetween,
children: [
Text(
'${'National Number'.tr}: ${EncryptionHelper.instance.decryptData(contentController.responseMap['id'])}',
'${'National Number'.tr}: ${(contentController.responseMap['id'])}',
style: AppStyle.title,
),
// Image.memory(
@@ -131,7 +131,7 @@ class AiPage extends StatelessWidget {
// ),
]),
Text(
'${'Address'.tr}: ${EncryptionHelper.instance.decryptData(contentController.responseMap['address'])}',
'${'Address'.tr}: ${(contentController.responseMap['address'])}',
style: AppStyle.title,
),
Row(

View File

@@ -322,8 +322,7 @@ class EgyptCardAI extends StatelessWidget {
IconButton(
onPressed: () async {
await ai.allMethodForAI(
EncryptionHelper.instance.decryptData(
ai.prompts[0]['prompt'].toString()),
(ai.prompts[0]['prompt'].toString()),
AppLink.uploadEgypt,
'driver_license'); //egypt
},
@@ -335,32 +334,30 @@ class EgyptCardAI extends StatelessWidget {
const Divider(color: AppColor.accentColor),
const SizedBox(height: 8.0),
Text(
'${'License Type'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptDriverLicense['license_type'])}',
'${'License Type'.tr}: ${(ai.responseIdEgyptDriverLicense['license_type'])}',
style: AppStyle.title,
),
const SizedBox(height: 8.0),
Text(
'${'National Number'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptDriverLicense['national_number'])}',
'${'National Number'.tr}: ${(ai.responseIdEgyptDriverLicense['national_number'])}',
style: AppStyle.title.copyWith(
color: EncryptionHelper.instance.decryptData(
ai.responseIdEgyptDriverLicense[
'national_number']) ==
EncryptionHelper.instance.decryptData(
ai.responseIdEgyptBack['nationalID'])
color: (ai.responseIdEgyptDriverLicense[
'national_number']) ==
(ai.responseIdEgyptBack['nationalID'])
? AppColor.greenColor
: AppColor.redColor),
),
const SizedBox(height: 8.0),
Text(
'${'Name (Arabic)'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptDriverLicense['name_arabic'])}',
'${'Name (Arabic)'.tr}: ${(ai.responseIdEgyptDriverLicense['name_arabic'])}',
),
const SizedBox(height: 8.0),
Text(
'${'Name (English)'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptDriverLicense['name_english'])}',
'${'Name (English)'.tr}: ${(ai.responseIdEgyptDriverLicense['name_english'])}',
),
const SizedBox(height: 8.0),
Text(
'${'Address'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptDriverLicense['address'])}',
'${'Address'.tr}: ${(ai.responseIdEgyptDriverLicense['address'])}',
),
const SizedBox(height: 8.0),
Text(
@@ -386,11 +383,8 @@ class EgyptCardAI extends StatelessWidget {
return Card(
child: InkWell(
onTap: () async {
await ai.allMethodForAI(
EncryptionHelper.instance
.decryptData(ai.prompts[0]['prompt'].toString()),
AppLink.uploadEgypt,
'driver_license'); //egypt
await ai.allMethodForAI((ai.prompts[0]['prompt'].toString()),
AppLink.uploadEgypt, 'driver_license'); //egypt
},
child: Column(
children: [
@@ -443,8 +437,7 @@ class EgyptCardAI extends StatelessWidget {
IconButton(
onPressed: () async {
await ai.allMethodForAI(
EncryptionHelper.instance.decryptData(
ai.prompts[1]['prompt'].toString()),
(ai.prompts[1]['prompt'].toString()),
AppLink.uploadEgypt,
'id_back'); //egypt
},
@@ -457,20 +450,18 @@ class EgyptCardAI extends StatelessWidget {
const SizedBox(height: 8.0),
// Assuming these keys exist in ai.responseIdEgyptFront
Text(
'${'National ID'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptBack['nationalID'])}',
'${'National ID'.tr}: ${(ai.responseIdEgyptBack['nationalID'])}',
style: AppStyle.title.copyWith(
color: EncryptionHelper.instance.decryptData(
ai.responseIdEgyptDriverLicense[
'national_number']) ==
EncryptionHelper.instance.decryptData(
ai.responseIdEgyptBack['nationalID'])
color: (ai.responseIdEgyptDriverLicense[
'national_number']) ==
(ai.responseIdEgyptBack['nationalID'])
? AppColor.greenColor
: AppColor.redColor),
),
const SizedBox(height: 8.0),
Text(
'${'Occupation'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptBack['occupation'])}', // Assuming 'occupation' exists
'${'Occupation'.tr}: ${(ai.responseIdEgyptBack['occupation'])}', // Assuming 'occupation' exists
),
const SizedBox(height: 8.0),
Row(
@@ -480,7 +471,7 @@ class EgyptCardAI extends StatelessWidget {
'${'Issue Date'.tr}: ${ai.responseIdEgyptBack['issueDate']}', // Assuming 'issueDate' exists
),
Text(
'${'Gender'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptBack['gender'])}', // Assuming 'gender' exists
'${'Gender'.tr}: ${(ai.responseIdEgyptBack['gender'])}', // Assuming 'gender' exists
),
],
),
@@ -516,11 +507,8 @@ class EgyptCardAI extends StatelessWidget {
return Card(
child: InkWell(
onTap: () async {
await ai.allMethodForAI(
EncryptionHelper.instance
.decryptData(ai.prompts[1]['prompt'].toString()),
AppLink.uploadEgypt,
'id_back'); //egypt
await ai.allMethodForAI((ai.prompts[1]['prompt'].toString()),
AppLink.uploadEgypt, 'id_back'); //egypt
},
child: Column(
children: [
@@ -571,8 +559,7 @@ class EgyptCardAI extends StatelessWidget {
IconButton(
onPressed: () async {
await ai.allMethodForAI(
EncryptionHelper.instance.decryptData(
ai.prompts[7]['prompt'].toString()),
(ai.prompts[7]['prompt'].toString()),
AppLink.uploadEgypt,
'non_id_back');
},
@@ -584,16 +571,16 @@ class EgyptCardAI extends StatelessWidget {
const Divider(color: AppColor.accentColor),
const SizedBox(height: 8.0),
Text(
'${'Country'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardBack['country'])}',
'${'Country'.tr}: ${(ai.responseNonIdCardBack['country'])}',
style: AppStyle.title,
),
const SizedBox(height: 8.0),
Text(
'${'Residency Type'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardBack['residencyType'])}',
'${'Residency Type'.tr}: ${(ai.responseNonIdCardBack['residencyType'])}',
),
const SizedBox(height: 8.0),
Text(
'${'Work Status'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardBack['workStatus'])}',
'${'Work Status'.tr}: ${(ai.responseNonIdCardBack['workStatus'])}',
),
const SizedBox(height: 8.0),
Row(
@@ -603,7 +590,7 @@ class EgyptCardAI extends StatelessWidget {
'${'Issue Date'.tr}: ${ai.responseNonIdCardBack['issueDate']}',
),
Text(
'${'Birth Date'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardBack['birthDate'])}',
'${'Birth Date'.tr}: ${(ai.responseNonIdCardBack['birthDate'])}',
),
],
),
@@ -623,11 +610,8 @@ class EgyptCardAI extends StatelessWidget {
return Card(
child: InkWell(
onTap: () async {
await ai.allMethodForAI(
EncryptionHelper.instance
.decryptData(ai.prompts[7]['prompt'].toString()),
AppLink.uploadEgypt,
'non_id_back');
await ai.allMethodForAI((ai.prompts[7]['prompt'].toString()),
AppLink.uploadEgypt, 'non_id_back');
},
child: Column(
children: [
@@ -670,8 +654,7 @@ class EgyptCardAI extends StatelessWidget {
IconButton(
onPressed: () async {
await ai.allMethodForAI(
EncryptionHelper.instance.decryptData(
ai.prompts[2]['id_front'].toString()),
(ai.prompts[2]['id_front'].toString()),
AppLink.uploadEgypt,
'id_front'); //egypt
},
@@ -688,10 +671,10 @@ class EgyptCardAI extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${'First Name'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptFront['first_name'])}',
'${'First Name'.tr}: ${(ai.responseIdEgyptFront['first_name'])}',
),
Text(
'${'CardID'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptFront['card_id'])}',
'${'CardID'.tr}: ${(ai.responseIdEgyptFront['card_id'])}',
),
],
),
@@ -700,16 +683,16 @@ class EgyptCardAI extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${'Full Name'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptFront['full_name'])}',
'${'Full Name'.tr}: ${(ai.responseIdEgyptFront['full_name'])}',
),
Text(
'${'DOB'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptFront['dob'])}',
'${'DOB'.tr}: ${(ai.responseIdEgyptFront['dob'])}',
),
],
),
const SizedBox(height: 8.0),
Text(
'${'Address'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdEgyptFront['address'])}',
'${'Address'.tr}: ${(ai.responseIdEgyptFront['address'])}',
),
const SizedBox(height: 8.0),
// Text(
@@ -726,11 +709,8 @@ class EgyptCardAI extends StatelessWidget {
return Card(
child: InkWell(
onTap: () async {
await ai.allMethodForAI(
EncryptionHelper.instance
.decryptData(ai.prompts[2]['prompt'].toString()),
AppLink.uploadEgypt,
'id_front'); //egypt
await ai.allMethodForAI((ai.prompts[2]['prompt'].toString()),
AppLink.uploadEgypt, 'id_front'); //egypt
},
child: Column(
children: [
@@ -773,8 +753,7 @@ class EgyptCardAI extends StatelessWidget {
IconButton(
onPressed: () async {
await ai.allMethodForAI(
EncryptionHelper.instance.decryptData(
ai.prompts[6]['prompt'].toString()),
(ai.prompts[6]['prompt'].toString()),
AppLink.uploadEgypt,
'non_id_front');
},
@@ -786,7 +765,7 @@ class EgyptCardAI extends StatelessWidget {
const Divider(color: AppColor.accentColor),
const SizedBox(height: 8.0),
Text(
'${'Full Name'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardFront['full_name'])}',
'${'Full Name'.tr}: ${(ai.responseNonIdCardFront['full_name'])}',
style: AppStyle.title,
),
const SizedBox(height: 8.0),
@@ -794,10 +773,10 @@ class EgyptCardAI extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${'Passport No'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardFront['passport_no'])}',
'${'Passport No'.tr}: ${(ai.responseNonIdCardFront['passport_no'])}',
),
Text(
'${'Card ID'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardFront['card_id'])}',
'${'Card ID'.tr}: ${(ai.responseNonIdCardFront['card_id'])}',
),
],
),
@@ -806,20 +785,20 @@ class EgyptCardAI extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${'Country'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardFront['country'])}',
'${'Country'.tr}: ${(ai.responseNonIdCardFront['country'])}',
),
Text(
'${'Gender'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardFront['gender'])}',
'${'Gender'.tr}: ${(ai.responseNonIdCardFront['gender'])}',
),
],
),
const SizedBox(height: 8.0),
Text(
'${'Birth Date'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardFront['birthdate'])}',
'${'Birth Date'.tr}: ${(ai.responseNonIdCardFront['birthdate'])}',
),
const SizedBox(height: 8.0),
Text(
'${'Address'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseNonIdCardFront['address'])}',
'${'Address'.tr}: ${(ai.responseNonIdCardFront['address'])}',
),
],
),
@@ -829,11 +808,8 @@ class EgyptCardAI extends StatelessWidget {
return Card(
child: InkWell(
onTap: () async {
await ai.allMethodForAI(
EncryptionHelper.instance
.decryptData(ai.prompts[6]['prompt'].toString()),
AppLink.uploadEgypt,
'non_id_front');
await ai.allMethodForAI((ai.prompts[6]['prompt'].toString()),
AppLink.uploadEgypt, 'non_id_front');
},
child: Column(
children: [
@@ -884,8 +860,7 @@ class EgyptCardAI extends StatelessWidget {
IconButton(
onPressed: () async {
ai.allMethodForAI(
EncryptionHelper.instance.decryptData(
ai.prompts[3]['prompt'].toString()),
(ai.prompts[3]['prompt'].toString()),
AppLink.uploadEgypt,
'car_front');
},
@@ -899,15 +874,15 @@ class EgyptCardAI extends StatelessWidget {
// Removed Make, Model, etc. as they are not available
Text(
'${'Plate Number'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdCardDriverEgyptFront['car_plate'])}',
'${'Plate Number'.tr}: ${(ai.responseIdCardDriverEgyptFront['car_plate'])}',
),
const SizedBox(height: 8.0),
Text(
'${'Owner Name'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdCardDriverEgyptFront['owner'])}',
'${'Owner Name'.tr}: ${(ai.responseIdCardDriverEgyptFront['owner'])}',
),
const SizedBox(height: 8.0),
Text(
'${'Address'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseIdCardDriverEgyptFront['address'])}',
'${'Address'.tr}: ${(ai.responseIdCardDriverEgyptFront['address'])}',
),
const SizedBox(height: 8.0),
Row(
@@ -931,11 +906,8 @@ class EgyptCardAI extends StatelessWidget {
return Card(
child: InkWell(
onTap: () async {
ai.allMethodForAI(
EncryptionHelper.instance
.decryptData(ai.prompts[3]['prompt'].toString()),
AppLink.uploadEgypt,
'car_front');
ai.allMethodForAI((ai.prompts[3]['prompt'].toString()),
AppLink.uploadEgypt, 'car_front');
},
child: Column(
children: [
@@ -1003,8 +975,7 @@ class EgyptCardAI extends StatelessWidget {
IconButton(
onPressed: () async {
ai.allMethodForAI(
EncryptionHelper.instance.decryptData(
ai.prompts[4]['prompt'].toString()),
(ai.prompts[4]['prompt'].toString()),
AppLink.uploadEgypt,
'car_back');
},
@@ -1076,11 +1047,8 @@ class EgyptCardAI extends StatelessWidget {
return Card(
child: InkWell(
onTap: () async {
ai.allMethodForAI(
EncryptionHelper.instance
.decryptData(ai.prompts[4]['prompt'].toString()),
AppLink.uploadEgypt,
'car_back');
ai.allMethodForAI((ai.prompts[4]['prompt'].toString()),
AppLink.uploadEgypt, 'car_back');
},
child: Column(
children: [
@@ -1123,8 +1091,7 @@ class EgyptCardAI extends StatelessWidget {
IconButton(
onPressed: () async {
await ai.allMethodForAI(
EncryptionHelper.instance.decryptData(
ai.prompts[5]['prompt'].toString()),
(ai.prompts[5]['prompt'].toString()),
AppLink.uploadEgypt,
'criminalRecord',
);
@@ -1140,19 +1107,16 @@ class EgyptCardAI extends StatelessWidget {
'${'InspectionResult'.tr}: ${ai.responseCriminalRecordEgypt['InspectionResult']}'),
const SizedBox(height: 8.0),
Text(
'${'FullName'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseCriminalRecordEgypt['FullName'])}',
'${'FullName'.tr}: ${(ai.responseCriminalRecordEgypt['FullName'])}',
style: AppStyle.title.copyWith(
color: EncryptionHelper.instance.decryptData(ai
.responseCriminalRecordEgypt['FullName']) ==
EncryptionHelper.instance.decryptData(
ai.responseIdEgyptDriverLicense[
'name_arabic'])
color: (ai.responseCriminalRecordEgypt['FullName']) ==
(ai.responseIdEgyptDriverLicense['name_arabic'])
? AppColor.greenColor
: AppColor.redColor),
),
const SizedBox(height: 8.0),
Text(
'${'NationalID'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseCriminalRecordEgypt['NationalID'])}'),
'${'NationalID'.tr}: ${(ai.responseCriminalRecordEgypt['NationalID'])}'),
const SizedBox(height: 8.0),
Text(
'${'IssueDate'.tr}: ${ai.responseCriminalRecordEgypt['IssueDate']}'),
@@ -1165,8 +1129,7 @@ class EgyptCardAI extends StatelessWidget {
child: InkWell(
onTap: () async {
await ai.allMethodForAI(
EncryptionHelper.instance
.decryptData(ai.prompts[5]['prompt'].toString()),
(ai.prompts[5]['prompt'].toString()),
AppLink.uploadEgypt,
'criminalRecord',
);

View File

@@ -1,6 +1,3 @@
import 'dart:convert';
import 'package:flutter_font_icons/flutter_font_icons.dart';
import 'package:sefer_driver/constant/colors.dart';
import 'package:sefer_driver/constant/style.dart';
import 'package:sefer_driver/controller/auth/captin/register_captin_controller.dart';
@@ -10,11 +7,7 @@ import 'package:sefer_driver/views/widgets/my_textField.dart';
import 'package:sefer_driver/views/widgets/mycircular.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sefer_driver/views/widgets/mydialoug.dart';
import '../../../../controller/functions/crud.dart';
import '../../../../controller/functions/encrypt_decrypt.dart';
import '../../../../print.dart';
import '../../../Rate/rate_app_page.dart';
class SmsSignupEgypt extends StatelessWidget {

View File

@@ -36,7 +36,7 @@ class CriminalDocumemtPage extends StatelessWidget {
? MyElevatedButton(
title: 'Next'.tr,
onPressed: () async {
if (EncryptionHelper.instance.decryptData(controller
if ((controller
.responseCriminalRecordEgypt['FullName']) !=
box.read(BoxName.nameArabic)) //todo get from server
{
@@ -141,22 +141,19 @@ Please fill in the JSON object with the extracted information, following these g
const Divider(color: AppColor.accentColor),
const SizedBox(height: 8.0),
Text(
'${'InspectionResult'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseCriminalRecordEgypt['InspectionResult'])}'),
'${'InspectionResult'.tr}: ${(ai.responseCriminalRecordEgypt['InspectionResult'])}'),
const SizedBox(height: 8.0),
Text(
'${'FullName'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseCriminalRecordEgypt['FullName'])}',
'${'FullName'.tr}: ${(ai.responseCriminalRecordEgypt['FullName'])}',
style: AppStyle.title.copyWith(
color: EncryptionHelper.instance.decryptData(ai
.responseCriminalRecordEgypt['FullName']) ==
EncryptionHelper.instance.decryptData(
ai.responseIdEgyptDriverLicense[
'name_arabic'])
color: (ai.responseCriminalRecordEgypt['FullName']) ==
(ai.responseIdEgyptDriverLicense['name_arabic'])
? AppColor.greenColor
: AppColor.redColor),
),
const SizedBox(height: 8.0),
Text(
'${'NationalID'.tr}: ${EncryptionHelper.instance.decryptData(ai.responseCriminalRecordEgypt['NationalID'])}'),
'${'NationalID'.tr}: ${(ai.responseCriminalRecordEgypt['NationalID'])}'),
const SizedBox(height: 8.0),
Text(
'${'IssueDate'.tr}: ${ai.responseCriminalRecordEgypt['IssueDate']}'),

View File

@@ -390,8 +390,7 @@ class InviteScreen extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
EncryptionHelper.instance.decryptData(
controller.driverInvitationData[index]['invitorName']),
(controller.driverInvitationData[index]['invitorName']),
style: const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w600,
@@ -447,8 +446,7 @@ class InviteScreen extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
EncryptionHelper.instance
.decryptData(invitation['passengerName'])
(invitation['passengerName'])
.toString(), // Handle null or missing data
style: const TextStyle(
fontSize: 17,
@@ -510,9 +508,7 @@ class InviteScreen extends StatelessWidget {
_buildStatItem(
context,
"Active Users".tr,
EncryptionHelper.instance
.decryptData(controller.driverInvitationDataToPassengers[0]
['passengerName'])
(controller.driverInvitationDataToPassengers[0]['passengerName'])
.toString(),
),
],

View File

@@ -336,10 +336,9 @@ class LoginCaptin extends StatelessWidget {
box
.read(BoxName.driverID)
.toString(),
EncryptionHelper.instance
.encryptData(box
.read(BoxName.emailDriver)
.toString()),
(box
.read(BoxName.emailDriver)
.toString()),
);
// Navigate to another screen or perform other actions
} else {}

View File

@@ -1,8 +1,10 @@
import 'dart:io';
import 'package:sefer_driver/constant/box_name.dart';
import 'package:sefer_driver/controller/auth/captin/login_captin_controller.dart';
import 'package:sefer_driver/controller/firebase/local_notification.dart';
import 'package:sefer_driver/main.dart';
import 'package:sefer_driver/views/auth/captin/cards/sms_signup.dart';
import 'package:sefer_driver/views/home/Captin/orderCaptin/vip_order_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_font_icons/flutter_font_icons.dart';
@@ -50,7 +52,7 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
// '${'Please wait'.tr} $minutesLeft ${"minutes before trying again.".tr}',
// '');
NotificationController1().showNotification(
'Sefer Driver'.tr,
'Tripz Driver'.tr,
'${'Please wait'.tr} $minutesLeft ${"minutes before trying again.".tr}',
'ding',
'');
@@ -93,46 +95,26 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
)
: const SizedBox(),
// : const SizedBox(),
// AnimatedContainer(
// duration: const Duration(microseconds: 200),
// width: controller.widthMapTypeAndTraffic,
// decoration: BoxDecoration(
// color: AppColor.secondaryColor,
// border: Border.all(color: AppColor.blueColor),
// borderRadius: BorderRadius.circular(15)),
// child: Builder(builder: (context) {
// return IconButton(
// onPressed: () async {
// print("Current working directory: ${Directory.current.path}");
// print(
// "pubspec.yaml exists here?: ${await File('${Directory.current.path}/pubspec.yaml').exists()}");
// try {
// await LingoHunter.extractAndCreateTranslationFiles(
// baseLang: 'en',
// langs: ['ar', 'fr', 'es'],
// // Remove projectDirectory: Let it auto-detect.
// // projectDirectory: '/Users/hamzaaleghwairyeen/development/App/driver_sefer',
// outputDirectory:
// '/Users/hamzaaleghwairyeen/development/App/driver_sefer/assets/lang',
// additionalRegExps: [
// RegExp(r'translate\("([^\"]+)"\)'),
// ],
// );
// print(
// "✅ Translation files generated successfully (auto-detected).");
// } catch (e) {
// print("Error: $e");
// }
// },
// icon: const Icon(
// FontAwesome5.grin_tears,
// size: 29,
// color: AppColor.blueColor,
// ),
// );
// }),
// ),
AnimatedContainer(
duration: const Duration(microseconds: 200),
width: controller.widthMapTypeAndTraffic,
decoration: BoxDecoration(
color: AppColor.secondaryColor,
border: Border.all(color: AppColor.blueColor),
borderRadius: BorderRadius.circular(15)),
child: Builder(builder: (context) {
return IconButton(
onPressed: () async {
print(box.read(BoxName.paymentLink));
},
icon: const Icon(
FontAwesome5.grin_tears,
size: 29,
color: AppColor.blueColor,
),
);
}),
),
const SizedBox(
height: 5,

View File

@@ -327,25 +327,7 @@ class OrderSpeedRequest extends StatelessWidget {
'driver_id': box.read(BoxName.driverID),
});
}
// .then((value) {
// var json = jsonDecode(res);
if (res == "failure") {
Get.defaultDialog(
title:
"This ride is already taken by another driver."
.tr,
middleText: '',
titleStyle: AppStyle.title,
middleTextStyle: AppStyle.title,
confirm: MyElevatedButton(
title: 'Ok'.tr,
onPressed: () {
Get.back();
Get.back();
// Get.back();
}));
} else if (jsonDecode(res)['status'] == "success") {
if (res != "failure") {
box.write(BoxName.statusDriverLocation, 'on');
orderRequestController.changeApplied();
List<String> bodyToPassenger = [
@@ -357,33 +339,29 @@ class OrderSpeedRequest extends StatelessWidget {
.sendNotificationToPassengerToken(
'Accepted Ride',
'your ride is applied'.tr,
// arguments['DriverList'][9].toString(),
orderRequestController
.arguments['DriverList'][9]
.toString(),
// box.read(BoxName.tokenDriver).toString(),
bodyToPassenger,
'start.wav');
await CRUD().postFromDialogue(
CRUD().postFromDialogue(
link: AppLink.addDriverOrder,
payload: {
'driver_id': orderRequestController.myList[6]
.toString(),
// box.read(BoxName.driverID).toString(),
'order_id':
orderRequestController.body.toString(),
'status': 'Apply'
});
await CRUD().postFromDialogue(
link: AppLink.addDriverOrder,
payload: {
'driver_id': orderRequestController.myList[6]
.toString(),
// box.read(BoxName.driverID).toString(),
'order_id': orderRequestController.myList[16]
.toString(),
'status': 'Apply'
});
// CRUD().postFromDialogue(
// link: AppLink.addDriverOrder,
// payload: {
// 'driver_id': orderRequestController.myList[6]
// .toString(),
// 'order_id': orderRequestController.myList[16]
// .toString(),
// 'status': 'Apply'
// });
if (AppLink.endPoint != AppLink.seferCairoServer) {
CRUD().post(
@@ -402,9 +380,6 @@ class OrderSpeedRequest extends StatelessWidget {
}
Get.back();
// 'Arguments passed to PassengerLocationMapPage:');
// 'Payment Method: ${orderRequestController.myList[13] == 'true' ? 'visa' : 'cash'}');
box.write(BoxName.rideArguments, {
'passengerLocation':
orderRequestController.myList[0].toString(),
@@ -473,6 +448,21 @@ class OrderSpeedRequest extends StatelessWidget {
});
Get.to(() => PassengerLocationMapPage(),
arguments: box.read(BoxName.rideArguments));
} else {
Get.defaultDialog(
title:
"This ride is already taken by another driver."
.tr,
middleText: '',
titleStyle: AppStyle.title,
middleTextStyle: AppStyle.title,
confirm: MyElevatedButton(
title: 'Ok'.tr,
onPressed: () {
Get.back();
Get.back();
// Get.back();
}));
}
// });
// Get.back();

View File

@@ -195,7 +195,7 @@ class WalletCaptain extends StatelessWidget {
_buildPromoCard(
title: 'Morning Promo'.tr,
timePromo: 'Morning Promo',
count: int.parse(captainWalletController
count: (captainWalletController
.walletDate['message'][0]
['morning_count']),
maxCount: 5,
@@ -208,7 +208,7 @@ class WalletCaptain extends StatelessWidget {
_buildPromoCard(
timePromo: 'Afternoon Promo',
title: 'Afternoon Promo'.tr,
count: int.parse(captainWalletController
count: (captainWalletController
.walletDate['message'][0]
['afternoon_count']),
maxCount: 5,

View File

@@ -0,0 +1,89 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../controller/home/captin/behavior_controller.dart';
class BehaviorPage extends StatelessWidget {
const BehaviorPage({
super.key,
});
@override
Widget build(BuildContext context) {
final controller = Get.put(DriverBehaviorController());
controller.fetchDriverBehavior();
return Scaffold(
appBar: AppBar(
title: Text('Driver Behavior'.tr),
centerTitle: true,
),
body: Obx(() {
if (controller.isLoading.value) {
return const Center(child: CircularProgressIndicator());
}
return SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12)),
elevation: 4,
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
const Text("Overall Behavior Score",
style: TextStyle(
fontSize: 20, fontWeight: FontWeight.bold)),
const SizedBox(height: 10),
Text(
"${controller.overallScore.value.toStringAsFixed(1)} / 100",
style: const TextStyle(
fontSize: 28, color: Colors.blue)),
],
),
),
),
const SizedBox(height: 20),
const Text("Last 10 Trips",
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 10),
ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: controller.lastTrips.length,
itemBuilder: (context, index) {
var trip = controller.lastTrips[index];
return Card(
elevation: 3,
child: ListTile(
leading: CircleAvatar(
backgroundColor: Colors.blue,
child: Text("${index + 1}",
style: const TextStyle(color: Colors.white)),
),
title: Text("Trip ID: ${trip['trip_id']}"),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Behavior Score: ${trip['behavior_score']}"),
Text("Max Speed: ${trip['max_speed']} km/h"),
Text("Hard Brakes: ${trip['hard_brakes']}"),
Text("Distance: ${trip['total_distance']} km"),
],
),
),
);
},
),
],
),
);
}),
);
}
}

View File

@@ -74,9 +74,7 @@ class CaptainsCars extends StatelessWidget {
padding: const EdgeInsets.symmetric(
horizontal: 4),
child: Text(
EncryptionHelper.instance
.decryptData(
car['car_plate']),
(car['car_plate']),
style: AppStyle.title,
),
),

View File

@@ -94,11 +94,8 @@ GetBuilder<AI> egyptCarLicenceFront() {
style: AppStyle.headTitle2),
IconButton(
onPressed: () async {
ai.allMethodForAI(
EncryptionHelper.instance.decryptData(
ai.prompts[3]['prompt'].toString()),
AppLink.uploadEgypt,
'car_front');
ai.allMethodForAI((ai.prompts[3]['prompt'].toString()),
AppLink.uploadEgypt, 'car_front');
},
icon: const Icon(Icons.refresh),
),
@@ -142,12 +139,8 @@ GetBuilder<AI> egyptCarLicenceFront() {
return Card(
child: InkWell(
onTap: () async {
ai.allMethodForAINewCar(
EncryptionHelper.instance
.decryptData(ai.prompts[3]['prompt'].toString()),
AppLink.uploadEgypt1,
'car_front',
'carId'); //todo
ai.allMethodForAINewCar((ai.prompts[3]['prompt'].toString()),
AppLink.uploadEgypt1, 'car_front', 'carId'); //todo
},
child: Column(
children: [
@@ -213,11 +206,8 @@ GetBuilder<AI> egyptCarLicenceBack() {
Text('Vehicle Details Back'.tr, style: AppStyle.headTitle2),
IconButton(
onPressed: () async {
ai.allMethodForAI(
EncryptionHelper.instance.decryptData(
ai.prompts[4]['prompt'].toString()),
AppLink.uploadEgypt,
'car_back');
ai.allMethodForAI((ai.prompts[4]['prompt'].toString()),
AppLink.uploadEgypt, 'car_back');
},
icon: const Icon(Icons.refresh),
),
@@ -286,11 +276,8 @@ GetBuilder<AI> egyptCarLicenceBack() {
return Card(
child: InkWell(
onTap: () async {
ai.allMethodForAI(
EncryptionHelper.instance
.decryptData(ai.prompts[4]['prompt'].toString()),
AppLink.uploadEgypt,
'car_back');
ai.allMethodForAI((ai.prompts[4]['prompt'].toString()),
AppLink.uploadEgypt, 'car_back');
},
child: Column(
children: [

View File

@@ -10,6 +10,7 @@ import 'package:sefer_driver/controller/profile/captain_profile_controller.dart'
import 'package:sefer_driver/views/widgets/my_scafold.dart';
import '../my_wallet/walet_captain.dart';
import 'behavior_page.dart';
import 'captains_cars.dart';
class ProfileCaptain extends StatelessWidget {
@@ -33,19 +34,38 @@ class ProfileCaptain extends StatelessWidget {
Material(
elevation: 2,
borderRadius: BorderRadius.circular(8),
child: InkWell(
onTap: () async {
addBankCodeEgypt(captainWalletController);
},
borderRadius: BorderRadius.circular(8),
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 16, horizontal: 16),
child: Text(
'Add bank Account'.tr,
style: AppStyle.title,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
InkWell(
onTap: () async {
addBankCodeEgypt(captainWalletController);
},
borderRadius: BorderRadius.circular(8),
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 16, horizontal: 16),
child: Text(
'Add bank Account'.tr,
style: AppStyle.title,
),
),
),
),
InkWell(
onTap: () async {
Get.to(() => BehaviorPage());
},
borderRadius: BorderRadius.circular(8),
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 16, horizontal: 16),
child: Text(
'Show behavior page'.tr,
style: AppStyle.title,
),
),
),
],
),
),
const SizedBox(height: 15),
@@ -73,41 +93,28 @@ class ProfileCaptain extends StatelessWidget {
driverId:
controller.captainProfileData['driverID'] ??
'',
name: EncryptionHelper.instance.decryptData(
(controller.captainProfileData[
'first_name']) ??
'') +
' ' +
EncryptionHelper.instance.decryptData(
(controller.captainProfileData[
'last_name']) ??
''),
phoneNumber: EncryptionHelper.instance
.decryptData(controller
.captainProfileData['phone']) ??
name:
'${((controller.captainProfileData['first_name']) ?? '')} ${((controller.captainProfileData['last_name']) ?? '')}',
phoneNumber:
(controller.captainProfileData['phone']) ??
'',
email: (controller.captainProfileData['email']) ??
'',
email: EncryptionHelper.instance.decryptData(
controller.captainProfileData['email']) ??
birthdate: (controller
.captainProfileData['birthdate']) ??
'',
birthdate: EncryptionHelper.instance.decryptData(
controller
.captainProfileData['birthdate']) ??
'',
gender: EncryptionHelper.instance.decryptData(
controller
.captainProfileData['gender']) ??
'',
education: EncryptionHelper.instance.decryptData(
controller
.captainProfileData['education']) ??
gender:
(controller.captainProfileData['gender']) ??
'',
education: (controller
.captainProfileData['education']) ??
'',
carMake:
controller.captainProfileData['make'] ?? '',
carModel:
controller.captainProfileData['model'] ?? '',
carPlate: EncryptionHelper.instance.decryptData(
controller
.captainProfileData['car_plate']) ??
carPlate: (controller
.captainProfileData['car_plate']) ??
'',
carColor:
controller.captainProfileData['color'] ?? '',

View File

@@ -251,20 +251,7 @@ class RideAvailableCard extends StatelessWidget {
// .then((value) {
// var json = jsonDecode(res);
if (res == "failure") {
MyDialog().getDialog(
"This ride is already taken by another driver.".tr, '', () {
CRUD().post(
link: AppLink.deleteAvailableRide, payload: {'id': rideInfo['id']});
if (AppLink.endPoint.toString() != AppLink.seferCairoServer) {
CRUD().post(
link:
'${AppLink.endPoint}/ride/notificationCaptain/deleteAvailableRide.php',
payload: {'id': rideInfo['id']});
}
Get.back();
});
} else if (jsonDecode(res)['status'] == "success") {
if (res != "failure") {
List<String> bodyToPassenger = [
box.read(BoxName.driverID).toString(),
box.read(BoxName.nameDriver).toString(),
@@ -273,7 +260,6 @@ class RideAvailableCard extends StatelessWidget {
box.write(BoxName.statusDriverLocation, 'on');
await CRUD().postFromDialogue(link: AppLink.addDriverOrder, payload: {
'driver_id': box.read(BoxName.driverID),
// box.read(BoxName.driverID).toString(),
'order_id': rideInfo['id'],
'status': 'Apply'
});
@@ -349,6 +335,19 @@ class RideAvailableCard extends StatelessWidget {
'carType': rideInfo['carType'].toString(),
'kazan': Get.find<HomeCaptainController>().kazan.toString(),
});
} else {
MyDialog().getDialog(
"This ride is already taken by another driver.".tr, '', () {
CRUD().post(
link: AppLink.deleteAvailableRide, payload: {'id': rideInfo['id']});
if (AppLink.endPoint.toString() != AppLink.seferCairoServer) {
CRUD().post(
link:
'${AppLink.endPoint}/ride/notificationCaptain/deleteAvailableRide.php',
payload: {'id': rideInfo['id']});
}
Get.back();
});
}
}
}