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

@@ -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) {