Update: 2026-06-25 02:28:33

This commit is contained in:
Hamza-Ayed
2026-06-25 02:28:33 +03:00
parent 1ff13f09ac
commit 98a8a2ae3d
43 changed files with 992 additions and 812 deletions

View File

@@ -303,21 +303,7 @@ class LocationSearchController extends GetxController {
rideLifecycle.resetNoRideSearch();
}
final bool isLoggedIn = box.read(BoxName.isVerified) == '1' &&
box.read(BoxName.passengerID) != null;
if (isLoggedIn) {
try {
getReverseGeocoding(passengerLocation).then((address) {
currentLocationString = address;
update();
});
} catch (e) {
Log.print('Error resolving current location: $e');
}
} else {
Log.print('LocationSearchController: Skipping reverse geocoding call, user not logged in.');
}
Log.print('LocationSearchController: Reverse geocoding deferred — will run when map is idle.');
OfflineMapService.instance
.downloadRegion(passengerLocation, radiusKm: 10.0);
@@ -493,10 +479,22 @@ class LocationSearchController extends GetxController {
}
}
bool _pendingGeocode = true;
void updateCurrentLocationFromCamera(LatLng target) {
Log.print('📍 updateCurrentLocationFromCamera: $target');
newMyLocation = target;
if (_pendingGeocode) {
_pendingGeocode = false;
if (box.read(BoxName.isVerified) == '1') {
getReverseGeocoding(target).then((address) {
currentLocationString = address;
update();
});
}
}
if (startLocationFromMap == true) {
Log.print('📍 Updating startLocationFromMap to $target');
newStartPointLocation = target;
@@ -865,12 +863,7 @@ class LocationSearchController extends GetxController {
mapEngine.heightBottomSheetShown = 250;
update();
Get.snackbar(
'Location Received'.tr,
'Route and prices have been calculated successfully!'.tr,
backgroundColor: AppColor.greenColor,
colorText: Colors.white,
);
mySnackbarInfo('Route and prices have been calculated successfully!'.tr);
}
} else {
Log.print('⚠️ Could not extract valid coordinates from link: $link');

View File

@@ -49,7 +49,7 @@ class NearbyDriversController extends GetxController {
},
);
if (res == 'failure') {
if (res == 'failure' || res is! Map) {
noCarString = true;
dataCarsLocationByPassenger = 'failure';
update();
@@ -57,7 +57,7 @@ class NearbyDriversController extends GetxController {
}
noCarString = false;
var responseData = jsonDecode(res);
var responseData = res;
dataCarsLocationByPassenger = responseData;
List driversList = [];

View File

@@ -1253,15 +1253,14 @@ class RideLifecycleController extends GetxController {
'data': {'status': 'NoRide', 'needsReview': false}
};
isStartAppHasRide = false;
} else {
var decoded = jsonDecode(res);
if (decoded['status'] == 'failure') {
} else if (res is Map) {
if (res['status'] == 'failure') {
rideStatusFromStartApp = {
'data': {'status': 'NoRide', 'needsReview': false}
};
isStartAppHasRide = false;
} else {
rideStatusFromStartApp = decoded;
rideStatusFromStartApp = res;
}
}
@@ -1654,13 +1653,12 @@ class RideLifecycleController extends GetxController {
payload: {'passengerID': box.read(BoxName.passengerID).toString()});
if (res != 'failure') {
var response = jsonDecode(res);
Log.print('getUpdatedRideForDriverApply Response: $response');
Log.print('getUpdatedRideForDriverApply Response: $res');
if (response['status'] == 'success' &&
response['data'] != null &&
response['data'] is Map) {
var data = response['data'];
if (res['status'] == 'success' &&
res['data'] != null &&
res['data'] is Map) {
var data = res['data'];
driverId = data['driver_id']?.toString() ?? '';
driverPhone = data['phone']?.toString() ?? '';
@@ -1814,10 +1812,9 @@ class RideLifecycleController extends GetxController {
'country': box.read(BoxName.countryCode) ?? '',
});
if (res != 'failure') {
var response = jsonDecode(res);
if (response['status'] == 'success') {
var data = response['data'];
if (res is Map) {
if (res['status'] == 'success') {
var data = res['data'];
totalPassengerSpeed = data['totalPassengerSpeed']?.toString() ?? '0';
totalPassengerBalash =
data['totalPassengerBalash']?.toString() ?? '0';
@@ -1847,7 +1844,7 @@ class RideLifecycleController extends GetxController {
} else {
MyDialog().getDialog(
'Promo Error'.tr,
response['message']?.toString() ?? 'Invalid Promo'.tr,
res['message']?.toString() ?? 'Invalid Promo'.tr,
() => Get.back());
return;
}
@@ -1855,8 +1852,7 @@ class RideLifecycleController extends GetxController {
Get.back();
await Future.delayed(const Duration(milliseconds: 120));
} catch (e) {
Get.snackbar('Error'.tr, e.toString(),
backgroundColor: AppColor.redColor);
mySnackeBarError(e.toString());
}
}
@@ -1891,10 +1887,9 @@ class RideLifecycleController extends GetxController {
'country': box.read(BoxName.countryCode) ?? '',
});
if (res != 'failure') {
var response = jsonDecode(res);
if (response['status'] == 'success') {
var data = response['data'];
if (res is Map) {
if (res['status'] == 'success') {
var data = res['data'];
totalPassengerSpeed = data['totalPassengerSpeed']?.toString() ?? '0';
totalPassengerBalash =
data['totalPassengerBalash']?.toString() ?? '0';
@@ -1914,7 +1909,7 @@ class RideLifecycleController extends GetxController {
data['totalPassengerRayehGaiBalash']?.toString() ?? '0';
// Save price_token from server response
priceToken = response['price_token']?.toString() ?? '';
priceToken = res['price_token']?.toString() ?? '';
totalPassenger = totalPassengerSpeed;
totalCostPassenger = totalPassenger;
@@ -2194,12 +2189,10 @@ class RideLifecycleController extends GetxController {
link: AppLink.getDriverCarsLocationToPassengerAfterApplied,
payload: {'driver_id': driverId});
if (res != 'failure') {
var datadriverLocation = jsonDecode(res);
if (datadriverLocation['message'] != null &&
datadriverLocation['message'].isNotEmpty) {
var _data = datadriverLocation['message'][0];
if (res != 'failure' && res is Map) {
if (res['message'] != null &&
(res['message'] as List).isNotEmpty) {
var _data = (res['message'] as List)[0];
LatLng newDriverPos = LatLng(
double.parse(_data['latitude'].toString()),
@@ -2233,7 +2226,7 @@ class RideLifecycleController extends GetxController {
}
mapEngine.clearMarkersExceptStartEndAndDriver();
reloadMarkerDriverCarsLocationToPassengerAfterApplied(
datadriverLocation);
res);
}
}
update();
@@ -2641,8 +2634,7 @@ class RideLifecycleController extends GetxController {
throw Exception('Failed to save trip');
}
} catch (e) {
Get.snackbar('Error'.tr, 'Failed to book trip: $e'.tr,
backgroundColor: AppColor.redColor);
mySnackeBarError('Failed to book trip: $e'.tr);
}
}
@@ -3639,21 +3631,14 @@ class RideLifecycleController extends GetxController {
Future<void> cancelRide() async {
if (selectedReasonIndex == -1) {
Get.snackbar(
'Attention'.tr,
'Please select a reason first'.tr,
snackPosition: SnackPosition.BOTTOM,
backgroundColor: Colors.orange,
colorText: Colors.white,
);
mySnackbarWarning('Please select a reason first'.tr);
return;
}
String finalReason = selectedReasonText;
if (finalReason == "Other".tr) {
if (otherReasonController.text.trim().isEmpty) {
Get.snackbar("Attention".tr, "Please write the reason...".tr,
backgroundColor: Colors.red, colorText: Colors.white);
mySnackbarWarning("Please write the reason...".tr);
return;
}
finalReason = otherReasonController.text.trim();
@@ -3697,8 +3682,7 @@ class RideLifecycleController extends GetxController {
var res =
await CRUD().get(link: AppLink.getapiKey, payload: {"keyName": key});
if (res != 'failure') {
var d = jsonDecode(res)['message'];
return d[key].toString();
return res['message'][key].toString();
}
return null;
}
@@ -3709,7 +3693,7 @@ class RideLifecycleController extends GetxController {
payload: {'id': rideId});
Log.print(response);
Log.print('2176');
return jsonDecode(response)['data'];
return response['data'];
}
void handleActiveRideOnStartup(dynamic data) {
@@ -4365,11 +4349,10 @@ class RideLifecycleController extends GetxController {
var resPromo = await CRUD().get(link: AppLink.getPromoFirst, payload: {
"passengerID": box.read(BoxName.passengerID).toString(),
});
if (resPromo != 'failure') {
var d1 = jsonDecode(resPromo);
promo = d1['message']['promo_code'];
discount = d1['message']['amount'];
validity = d1['message']['validity_end_date'];
if (resPromo is Map) {
promo = resPromo['message']['promo_code'];
discount = resPromo['message']['amount'];
validity = resPromo['message']['validity_end_date'];
}
box.write(BoxName.isFirstTime, '1');
Get.dialog(

View File

@@ -15,6 +15,7 @@ import '../../../print.dart';
import '../../../services/emergency_signal_service.dart';
import '../../../views/widgets/elevated_btn.dart';
import '../../../views/widgets/my_textField.dart';
import '../../../views/widgets/error_snakbar.dart';
import '../../functions/launch.dart';
import '../../firebase/notification_service.dart';
import '../../functions/crud.dart';
@@ -255,7 +256,7 @@ class UiInteractionsController extends GetxController {
String storedPhone = box.read(BoxName.sosPhonePassenger)!;
if (rideLifecycle.rideId == 'yet' || rideLifecycle.driverId.isEmpty) {
Get.snackbar("Alert".tr, "Wait for the trip to start first".tr);
mySnackbarWarning("Wait for the trip to start first".tr);
return;
}
@@ -374,8 +375,7 @@ Siro Team''';
} else if (res['status'] == 'success') {
if (Get.isDialogOpen ?? false) Get.back();
Get.snackbar("Success".tr, "The invitation was sent successfully".tr,
backgroundColor: AppColor.greenColor, colorText: Colors.white);
mySnackbarSuccess("The invitation was sent successfully".tr);
List tokensData = res['data'];
for (var device in tokensData) {