Update: 2026-07-23 20:43:21

This commit is contained in:
Hamza-Ayed
2026-07-23 20:43:21 +03:00
parent 1e785061ec
commit 92eb7fe25d
5 changed files with 54 additions and 24 deletions
+1 -2
View File
@@ -51,8 +51,7 @@ class AppLink {
case 'Egypt': case 'Egypt':
return 'https://location-egypt.siromove.com/siro/ride/location'; return 'https://location-egypt.siromove.com/siro/ride/location';
case 'Jordan': case 'Jordan':
// TODO: Change to new subdomain when fully migrated return 'https://jordan-siro.intaleqapp.com/loction_server/siro/ride/location';
return 'https://location.intaleq.xyz/intaleq/ride/location';
default: default:
return 'https://location.siromove.com/siro/ride/location'; return 'https://location.siromove.com/siro/ride/location';
} }
+25 -7
View File
@@ -1,3 +1,5 @@
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jwt_decoder/jwt_decoder.dart'; import 'package:jwt_decoder/jwt_decoder.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -17,10 +19,8 @@ import '../functions/crud.dart';
import '../functions/encrypt_decrypt.dart'; import '../functions/encrypt_decrypt.dart';
class OtpHelper extends GetxController { class OtpHelper extends GetxController {
static final String _sendOtpUrl = static final String _sendOtpUrl = '${AppLink.server}/auth/otp/request.php';
'${AppLink.server}/auth/otp/request.php'; static final String _verifyOtpUrl = '${AppLink.server}/auth/otp/verify.php';
static final String _verifyOtpUrl =
'${AppLink.server}/auth/otp/verify.php';
static final String _checkAdminLogin = static final String _checkAdminLogin =
'${AppLink.server}/Admin/auth/login.php'; '${AppLink.server}/Admin/auth/login.php';
@@ -185,7 +185,13 @@ class OtpHelper extends GetxController {
await box.write(BoxName.phoneVerified, true); await box.write(BoxName.phoneVerified, true);
await box.write('admin_password', password); await box.write('admin_password', password);
FirebaseMessaging.instance.subscribeToTopic('admin_alerts'); if (Platform.isAndroid || Platform.isIOS) {
try {
FirebaseMessaging.instance.subscribeToTopic('admin_alerts');
} catch (e) {
Log.print('FCM Subscribe error: $e');
}
}
mySnackbarSuccess('تم تسجيل الدخول بنجاح'); mySnackbarSuccess('تم تسجيل الدخول بنجاح');
return true; return true;
@@ -241,7 +247,13 @@ class OtpHelper extends GetxController {
String token = r(rawJwt.toString()).split(AppInformation.addd)[0]; String token = r(rawJwt.toString()).split(AppInformation.addd)[0];
if (!JwtDecoder.isExpired(token)) { if (!JwtDecoder.isExpired(token)) {
Log.print('Valid JWT found, skipping login.php (no OTP needed)'); Log.print('Valid JWT found, skipping login.php (no OTP needed)');
FirebaseMessaging.instance.subscribeToTopic('admin_alerts'); if (Platform.isAndroid || Platform.isIOS) {
try {
FirebaseMessaging.instance.subscribeToTopic('admin_alerts');
} catch (e) {
Log.print('FCM Subscribe error: $e');
}
}
Get.offAll(() => const AdminHomePage()); Get.offAll(() => const AdminHomePage());
return; return;
} }
@@ -279,7 +291,13 @@ class OtpHelper extends GetxController {
} else if (response['jwt'] != null) { } else if (response['jwt'] != null) {
box.write(BoxName.jwt, c(response['jwt'])); box.write(BoxName.jwt, c(response['jwt']));
} }
FirebaseMessaging.instance.subscribeToTopic('admin_alerts'); if (Platform.isAndroid || Platform.isIOS) {
try {
FirebaseMessaging.instance.subscribeToTopic('admin_alerts');
} catch (e) {
Log.print('FCM Subscribe error: $e');
}
}
try { try {
if (Get.isRegistered<DashboardController>()) { if (Get.isRegistered<DashboardController>()) {
Get.find<DashboardController>().getDashBoard(); Get.find<DashboardController>().getDashBoard();
@@ -154,15 +154,21 @@ class FirebaseMessagesController extends GetxController {
driverToken = myList[14].toString(); driverToken = myList[14].toString();
Get.put(HomeCaptainController(), permanent: true).changeRideId(); Get.put(HomeCaptainController(), permanent: true).changeRideId();
update(); update();
Get.toNamed('/OrderRequestPage', arguments: {
'myListString': myListString, if (Get.currentRoute != '/OrderRequestPage') {
'DriverList': myList, Log.print("🚀 FCM: Navigating to OrderRequestPage...");
'body': body, Get.toNamed('/OrderRequestPage', arguments: {
'is_destination_match': message.data['is_destination_match'] ?? '0', 'myListString': myListString,
// 🆕 "أرباحك أعلى" — يُرسَل فقط عند وجود فرق إيجابي حقيقي 'DriverList': myList,
'driver_earnings_extra': message.data['driver_earnings_extra'], 'body': body,
'driver_earnings_currency': message.data['driver_earnings_currency'], 'is_destination_match': message.data['is_destination_match'] ?? '0',
}); // 🆕 "أرباحك أعلى" — يُرسَل فقط عند وجود فرق إيجابي حقيقي
'driver_earnings_extra': message.data['driver_earnings_extra'],
'driver_earnings_currency': message.data['driver_earnings_currency'],
});
} else {
Log.print("⚠️ [FCM] User is already on OrderRequestPage. Skipping navigation.");
}
} }
break; break;
+12 -5
View File
@@ -232,13 +232,20 @@ Future<void> backgroundMessageHandler(RemoteMessage message) async {
); );
bool isAppInForeground = box.read(BoxName.isAppInForeground) ?? false; bool isAppInForeground = box.read(BoxName.isAppInForeground) ?? false;
String? currentRideStatus = box.read(BoxName.rideStatus);
bool hasActiveRide = (currentRideStatus == 'Begin' ||
currentRideStatus == 'Apply' ||
currentRideStatus == 'Arrived');
if (!isAppInForeground) { if (!hasActiveRide) {
await TripOverlayPlugin.showOverlay(tripData, autoCloseSeconds: 15); if (!isAppInForeground) {
await TripOverlayPlugin.showOverlay(tripData, autoCloseSeconds: 15);
}
// 🔴 الكتابة على القرص مباشرة بدلاً من الرام لضمان انتقالها للتطبيق 🔴
await storage.write(key: 'pending_driver_list', value: myListString);
} else {
print("⛔ [Background FCM] Ignoring new order overlay - driver is in active ride ($currentRideStatus)");
} }
// 🔴 الكتابة على القرص مباشرة بدلاً من الرام لضمان انتقالها للتطبيق 🔴
await storage.write(key: 'pending_driver_list', value: myListString);
} }
} }
} }
+1 -1
View File
@@ -31,7 +31,7 @@ class AppLink {
case 'Egypt': case 'Egypt':
return 'https://location-egypt.siromove.com/siro/ride/location'; return 'https://location-egypt.siromove.com/siro/ride/location';
case 'Jordan': case 'Jordan':
return 'https://location.intaleq.xyz/intaleq/ride/location'; return 'https://jordan-siro.intaleqapp.com/loction_server/siro/ride/location';
default: default:
return 'https://location.siromove.com/siro/ride/location'; return 'https://location.siromove.com/siro/ride/location';
} }