Update: 2026-06-10 18:11:50
This commit is contained in:
@@ -112,6 +112,7 @@ class RideLifecycleController extends GetxController {
|
||||
late String driverId = '';
|
||||
late String make = '';
|
||||
late String model = '';
|
||||
late String gender = '';
|
||||
late String carColor = '';
|
||||
late String licensePlate = '';
|
||||
late String driverName = '';
|
||||
@@ -120,6 +121,9 @@ class RideLifecycleController extends GetxController {
|
||||
late String colorHex = '';
|
||||
late String carYear = '';
|
||||
late String driverRate = '5.0';
|
||||
late String driverRatingCount = '0';
|
||||
late String driverCompletedRides = '0';
|
||||
late String driverTier = 'Verified driver';
|
||||
late String driverToken = '';
|
||||
|
||||
double kazan = 8;
|
||||
@@ -1481,7 +1485,8 @@ class RideLifecycleController extends GetxController {
|
||||
|
||||
// إيقاف جلب السيارات المجاورة ومسحها، باستثناء السائق الذي قبل الطلب
|
||||
mapEngine.reloadStartApp = false;
|
||||
mapEngine.markers.removeWhere((marker) => marker.markerId.value != driverId.toString());
|
||||
mapEngine.markers
|
||||
.removeWhere((marker) => marker.markerId.value != driverId.toString());
|
||||
mapEngine.update();
|
||||
|
||||
await getDriverCarsLocationToPassengerAfterApplied();
|
||||
@@ -1490,8 +1495,7 @@ class RideLifecycleController extends GetxController {
|
||||
LatLng driverPos = driverCarsLocationToPassengerAfterApplied.last;
|
||||
Log.print(
|
||||
'[rideAppliedFromDriver] 📍 Driver at: $driverPos, Passenger at: $passengerLocation');
|
||||
await getInitialDriverDistanceAndDuration(driverPos, passengerLocation);
|
||||
await drawDriverPathOnly(driverPos, passengerLocation);
|
||||
await calculateDriverToPassengerRoute(driverPos, passengerLocation);
|
||||
mapEngine.fitCameraToPoints(driverPos, passengerLocation);
|
||||
}
|
||||
|
||||
@@ -1656,6 +1660,9 @@ class RideLifecycleController extends GetxController {
|
||||
driverToken = data['token']?.toString() ?? '';
|
||||
carYear = data['year']?.toString() ?? '';
|
||||
driverRate = data['ratingDriver']?.toString() ?? '5.0';
|
||||
driverRatingCount = data['ratingCount']?.toString() ?? '0';
|
||||
driverCompletedRides = data['completedRides']?.toString() ?? '0';
|
||||
driverTier = data['driverTier']?.toString() ?? 'Verified driver';
|
||||
|
||||
update();
|
||||
}
|
||||
@@ -2221,6 +2228,15 @@ class RideLifecycleController extends GetxController {
|
||||
polyLines = polyLines
|
||||
.where((p) => !p.polylineId.value.startsWith('driver_route'))
|
||||
.toSet();
|
||||
polyLines = {
|
||||
...polyLines,
|
||||
Polyline(
|
||||
polylineId: const PolylineId('main_route'),
|
||||
points: decodedPoints,
|
||||
color: const Color(0xFF2196F3),
|
||||
width: 6,
|
||||
)
|
||||
};
|
||||
} else {
|
||||
// مسح السلمات القديمة أولاً
|
||||
polyLines = polyLines
|
||||
@@ -2290,7 +2306,9 @@ class RideLifecycleController extends GetxController {
|
||||
_routeHeadingMismatchCount = 0;
|
||||
_isRecalculatingRoute = true;
|
||||
if (statusRide == 'Begin' ||
|
||||
currentRideState.value == RideState.inProgress) {
|
||||
statusRide == 'Arrived' ||
|
||||
currentRideState.value == RideState.inProgress ||
|
||||
currentRideState.value == RideState.driverArrived) {
|
||||
await calculateDriverToPassengerRoute(driverPos, myDestination,
|
||||
isBeginPhase: true);
|
||||
} else {
|
||||
@@ -2504,6 +2522,8 @@ class RideLifecycleController extends GetxController {
|
||||
String icon;
|
||||
if (model.contains('دراجة') || make.contains('دراجة')) {
|
||||
icon = mapEngine.motoIcon;
|
||||
} else if (gender == 'Female') {
|
||||
icon = mapEngine.ladyIcon;
|
||||
} else {
|
||||
icon = mapEngine.carIcon;
|
||||
}
|
||||
@@ -3026,6 +3046,17 @@ class RideLifecycleController extends GetxController {
|
||||
mapEngine.playRouteAnimation(
|
||||
mapEngine.polylineCoordinates, mapEngine.lastComputedBounds);
|
||||
}
|
||||
|
||||
if (driverCarsLocationToPassengerAfterApplied.isNotEmpty &&
|
||||
myDestination.latitude != 0 &&
|
||||
myDestination.longitude != 0) {
|
||||
await calculateDriverToPassengerRoute(
|
||||
driverCarsLocationToPassengerAfterApplied.last,
|
||||
myDestination,
|
||||
isBeginPhase: true,
|
||||
);
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -3903,12 +3934,37 @@ class RideLifecycleController extends GetxController {
|
||||
|
||||
make = data['make']?.toString() ?? '';
|
||||
model = data['model']?.toString() ?? '';
|
||||
gender = data['gender']?.toString() ?? '';
|
||||
carColor = data['color']?.toString() ?? '';
|
||||
colorHex = data['color_hex']?.toString() ?? '';
|
||||
licensePlate = data['car_plate']?.toString() ?? '';
|
||||
carYear = data['year']?.toString() ?? '';
|
||||
|
||||
// المحاولة الفورية لرسم السائق إذا توفرت الإحداثيات في البيانات
|
||||
double lat = double.tryParse(
|
||||
data['latitude']?.toString() ?? data['lat']?.toString() ?? '0') ??
|
||||
0;
|
||||
double lng = double.tryParse(data['longitude']?.toString() ??
|
||||
data['lng']?.toString() ??
|
||||
'0') ??
|
||||
0;
|
||||
double heading = double.tryParse(data['heading']?.toString() ?? '0') ?? 0;
|
||||
|
||||
if (lat != 0 && lng != 0) {
|
||||
LatLng initialPos = LatLng(lat, lng);
|
||||
if (driverCarsLocationToPassengerAfterApplied.isEmpty) {
|
||||
driverCarsLocationToPassengerAfterApplied.add(initialPos);
|
||||
} else {
|
||||
driverCarsLocationToPassengerAfterApplied[0] = initialPos;
|
||||
}
|
||||
// تحديث الماركر فوراً لضمان ظهوره بشكل موثوق
|
||||
updateDriverMarker(initialPos, heading);
|
||||
}
|
||||
|
||||
driverRate = data['ratingDriver']?.toString() ?? '5.0';
|
||||
driverRatingCount = data['ratingCount']?.toString() ?? '0';
|
||||
driverCompletedRides = data['completedRides']?.toString() ?? '0';
|
||||
driverTier = data['driverTier']?.toString() ?? 'Verified driver';
|
||||
driverToken = data['token']?.toString() ?? '';
|
||||
|
||||
update();
|
||||
@@ -4185,55 +4241,6 @@ class RideLifecycleController extends GetxController {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> getDistanceFromDriverAfterAcceptedRide(
|
||||
String origin, String destination) async {
|
||||
String apiKey = Env.mapKeyOsm;
|
||||
if (origin.isEmpty) {
|
||||
origin = '${passengerLocation.latitude},${passengerLocation.longitude}';
|
||||
}
|
||||
var uri = Uri.parse(
|
||||
'$dynamicApiUrl?origin=$origin&destination=$destination&steps=false&overview=false');
|
||||
Log.print('uri: $uri');
|
||||
|
||||
http.Response response;
|
||||
Map<String, dynamic> responseData;
|
||||
|
||||
try {
|
||||
response = await http.get(
|
||||
uri,
|
||||
headers: {
|
||||
'X-API-KEY': apiKey,
|
||||
},
|
||||
).timeout(const Duration(seconds: 20));
|
||||
|
||||
if (response.statusCode != 200) {
|
||||
Log.print('Error from API: ${response.statusCode}');
|
||||
isLoading = false;
|
||||
update();
|
||||
return;
|
||||
}
|
||||
if (Get.isBottomSheetOpen ?? false) {
|
||||
Get.back();
|
||||
}
|
||||
isDrawingRoute = false;
|
||||
|
||||
responseData = json.decode(response.body);
|
||||
Log.print('responseData: $responseData');
|
||||
|
||||
if (responseData['status'] != 'ok') {
|
||||
Log.print('API returned an error: ${responseData['message']}');
|
||||
isLoading = false;
|
||||
update();
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
Log.print('Failed to get directions: $e');
|
||||
isLoading = false;
|
||||
update();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _stageNiceToHave() async {
|
||||
Log.print('🚀 MapPassengerController: Starting _stageNiceToHave');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user