Update codebase

This commit is contained in:
Hamza-Ayed
2026-08-09 16:56:13 +03:00
parent 95e2e4f35d
commit b64debaa88
1058 changed files with 164327 additions and 113928 deletions
@@ -6,9 +6,9 @@ import 'dart:math';
import 'dart:math' as math;
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'package:tripz_driver/controller/home/captin/home_captain_controller.dart';
import 'package:tripz_driver/views/widgets/error_snakbar.dart';
import 'package:tripz_driver/views/widgets/mydialoug.dart';
import 'package:siro_driver/controller/home/captin/home_captain_controller.dart';
import 'package:siro_driver/views/widgets/error_snakbar.dart';
import 'package:siro_driver/views/widgets/mydialoug.dart';
import 'package:bubble_head/bubble.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart' as geo;
@@ -535,6 +535,18 @@ class MapDriverController extends GetxController
);
if (response['status'] == 'success') {
// 💰 التعويض عن عدم حضور الراكب — يحسبه الخادم من مسافة الاقتراب
// ودقائق الانتظار، ويُضيفه لمحفظة السائق. صفر يعني أن الإلغاء وقع
// قبل تسجيل الوصول أو قبل اكتمال مدة الانتظار المقررة.
final num compensation = response['compensation'] ?? 0;
if (compensation > 0) {
final int waited = response['waited_minutes'] ?? 0;
mySnackbarSuccess(
"تم تعويضك $compensation عن المسافة و $waited دقيقة انتظار."
.tr,
);
}
// 🔥🔥 معالجة الحظر (The Penalty Logic) 🔥🔥
bool isBlocked = response['is_blocked'] ?? false;
@@ -1401,9 +1413,8 @@ class MapDriverController extends GetxController
// الثابتين (distance/duration) اللذين يمثلان المسار المخطط أصلاً
// ولا يُحدَّثان أبداً أثناء الرحلة — كانا يُبطلان فعلياً حماية
// "إعادة حساب السعر من المسافة الفعلية" في الباك إند.
final double actualDistanceKm = currentRideDistanceKm > 0
? currentRideDistanceKm
: safeParseDouble(distance);
final double actualDistanceKm =
currentRideDistanceKm > 0 ? currentRideDistanceKm : safeParseDouble(distance);
final int actualDurationMinutes = _rideStartTime != null
? (DateTime.now().difference(_rideStartTime!).inSeconds / 60).ceil()
: safeParseInt(duration);
@@ -1872,7 +1883,7 @@ class MapDriverController extends GetxController
box.write(BoxName.countryCode, 'Jordan');
update(); // [Fix N-5]
// box.write(BoxName.serverChosen,
// AppLink.TripzSyriaServer); // مثال: اختر سيرفر سوريا للبيانات
// AppLink.SiroSyriaServer); // مثال: اختر سيرفر سوريا للبيانات
return 'Jordan';
}
@@ -1898,7 +1909,7 @@ class MapDriverController extends GetxController
/// **جلب ورسم المسار (OSRM - New Standard System)**
///
/// تستخدم السيرفر الجديد: https://routesy.tripz.xyz/route/v1/driving
/// تستخدم السيرفر الجديد: https://routesy.intaleq.xyz/route/v1/driving
Future<void> getRoute({
required LatLng origin,
required LatLng destination,
@@ -2581,10 +2592,42 @@ class MapDriverController extends GetxController
}
}
/// ‏يسأل الخادم عن آخر رحلة منتهية لم يقيّم السائق راكبها، ويفتح شاشة
/// ‏التقييم إن وُجدت. لا ينتظر ولا يرمي — لا يعطّل بدء العمل.
void _checkPendingPassengerRating() async {
try {
final res = await CRUD().post(
link: AppLink.pendingRating,
payload: {'role': 'driver'},
);
final data = res is Map ? (res['message'] ?? res['data']) : null;
if (data is! Map || data['pending'] != true) return;
Get.to(
() => RatePassenger(),
arguments: {
'passengerId': data['targetId']?.toString() ?? '',
'rideId': data['rideId']?.toString() ?? '',
'price': data['price']?.toString() ?? '',
'walletChecked': 'false',
},
preventDuplicates: true,
);
} catch (e) {
Log.print('⚠️ تعذّر فحص التقييم المتأخر: $e');
}
}
@override
void onInit() async {
mapAPIKEY = await storage.read(key: BoxName.mapAPIKEY);
await argumentLoading();
// ‏شاشة تقييم الراكب تُفتح مباشرة بعد إنهاء الرحلة (Get.off أدناه)،
// ‏لكن السائق الذي يغلقها أو يُقفل تطبيقه لا يُطلب منه التقييم ثانيةً.
// ‏هذا الفحص يلتقط المتأخر عند أول فتح للتطبيق.
_checkPendingPassengerRating();
Get.put(FirebaseMessagesController());
runGoogleMapDirectly();
addCustomCarIcon();
@@ -2881,8 +2924,7 @@ class MapDriverController extends GetxController
polyLines.removeWhere(
(p) => p.polylineId.value.startsWith('passenger_walk_line'));
if (!isRideStarted &&
isArrivedSend &&
if (!isRideStarted && isArrivedSend &&
upcomingPathPoints.isNotEmpty &&
latLngPassengerLocation.latitude != 0) {
final LatLng lastRoadPt = upcomingPathPoints.last;