Update: 2026-06-11 13:47:39
This commit is contained in:
@@ -222,14 +222,14 @@ class RegisterController extends GetxController {
|
||||
|
||||
if (res1 != 'failure') {
|
||||
//Multi-server signup (moved inside the successful registration check)
|
||||
// if (AppLink.IntaleqAlexandriaServer != AppLink.IntaleqSyriaServer) {
|
||||
// if (AppLink.SiroAlexandriaServer != AppLink.SiroSyriaServer) {
|
||||
// List<Future> signUp = [
|
||||
// CRUD().post(
|
||||
// link: '${AppLink.IntaleqAlexandriaServer}/auth/signup.php',
|
||||
// link: '${AppLink.SiroAlexandriaServer}/auth/signup.php',
|
||||
// payload: payload,
|
||||
// ),
|
||||
// CRUD().post(
|
||||
// link: '${AppLink.IntaleqGizaServer}/auth/signup.php',
|
||||
// link: '${AppLink.SiroGizaServer}/auth/signup.php',
|
||||
// payload: payload,
|
||||
// )
|
||||
// ];
|
||||
|
||||
@@ -446,7 +446,7 @@ class FirebaseMessagesController extends GetxController {
|
||||
|
||||
// NotificationController().showNotification(
|
||||
// 'Don’t forget your personal belongings.'.tr,
|
||||
// 'Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app'
|
||||
// 'Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Siro app'
|
||||
// .tr,
|
||||
// 'ding');
|
||||
|
||||
@@ -536,7 +536,7 @@ class FirebaseMessagesController extends GetxController {
|
||||
// if (Platform.isAndroid) {
|
||||
// notificationController.showNotification(
|
||||
// 'Driver Cancelled Your Trip'.tr,
|
||||
// 'you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet'
|
||||
// 'you will pay to Driver you will be pay the cost of driver time look to your Siro Wallet'
|
||||
// .tr,
|
||||
// 'cancel');
|
||||
// }
|
||||
|
||||
@@ -6,7 +6,7 @@ import '../../print.dart'; // للترجمة .tr
|
||||
|
||||
class NotificationService {
|
||||
static const String _serverUrl =
|
||||
'https://api.intaleq.xyz/intaleq/ride/firebase/send_fcm.php';
|
||||
'https://api.intaleq.xyz/siro/ride/firebase/send_fcm.php';
|
||||
|
||||
static Future<void> sendNotification({
|
||||
required String target,
|
||||
|
||||
@@ -70,8 +70,8 @@ checkForBounusInvitation() {
|
||||
|
||||
void showUpdateDialog(BuildContext context) {
|
||||
final String storeUrl = Platform.isAndroid
|
||||
? 'https://play.google.com/store/apps/details?id=com.Intaleq.intaleq'
|
||||
: 'https://apps.apple.com/jo/app/intaleq-rider/id6748075179';
|
||||
? 'https://play.google.com/store/apps/details?id=com.Siro.siro'
|
||||
: 'https://apps.apple.com/jo/app/siro-rider/id6748075179';
|
||||
showGeneralDialog(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
|
||||
@@ -8,7 +8,7 @@ import '../../main.dart';
|
||||
|
||||
class SecurityChecks {
|
||||
static const platform = MethodChannel(
|
||||
'com.Intaleq.intaleq/security'); // Choose a unique channel name
|
||||
'com.Siro.siro/security'); // Choose a unique channel name
|
||||
|
||||
static Future<bool> isDeviceCompromised() async {
|
||||
try {
|
||||
|
||||
@@ -42,7 +42,7 @@ VARS=$(cat "$ORIG_FILE" | awk '
|
||||
# Extract words that look like declarations.
|
||||
# We look for typical type names or var/final followed by variable name
|
||||
for (i = 1; i < NF; i++) {
|
||||
if ($i ~ /^(var|final|const|late|RxBool|RxInt|RxDouble|RxString|RxList|RxMap|RxSet|Rx|String|int|double|bool|List|Map|Set|Timer|LatLng|Position|IntaleqMapController)$/) {
|
||||
if ($i ~ /^(var|final|const|late|RxBool|RxInt|RxDouble|RxString|RxList|RxMap|RxSet|Rx|String|int|double|bool|List|Map|Set|Timer|LatLng|Position|SiroMapController)$/) {
|
||||
# The next field might be the variable name, or it might have a type like String?
|
||||
name = $(i+1)
|
||||
# Remove trailing ?, ;, =
|
||||
|
||||
@@ -47,7 +47,7 @@ def extract_declarations(text):
|
||||
|
||||
# Extract variables/fields declarations
|
||||
var_decl_pattern = re.compile(
|
||||
r'\b(?:var|final|const|late|RxBool|RxInt|RxDouble|RxString|RxList|RxMap|RxSet|Rx|String|int|double|bool|List|Map|Set|Timer|LatLng|Position|IntaleqMapController)\??\s+([a-zA-Z0-9_]+)\b'
|
||||
r'\b(?:var|final|const|late|RxBool|RxInt|RxDouble|RxString|RxList|RxMap|RxSet|Rx|String|int|double|bool|List|Map|Set|Timer|LatLng|Position|SiroMapController)\??\s+([a-zA-Z0-9_]+)\b'
|
||||
)
|
||||
|
||||
variables = set()
|
||||
|
||||
@@ -10,7 +10,7 @@ class IosLiveActivityService {
|
||||
static void init() {
|
||||
if (Platform.isIOS) {
|
||||
_liveActivitiesPlugin.init(
|
||||
appGroupId: "group.com.Intaleq.intaleq",
|
||||
appGroupId: "group.com.Siro.siro",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'dart:async';
|
||||
import 'dart:ui' as ui;
|
||||
import 'dart:math' show cos, max, min, pi, pow, sqrt;
|
||||
import 'dart:typed_data';
|
||||
import 'package:siro_rider/controller/home/map/ride_lifecycle_controller.dart';
|
||||
@@ -84,7 +85,7 @@ class MapEngineController extends GetxController {
|
||||
}
|
||||
|
||||
void onStyleLoaded() async {
|
||||
Log.print('🗺️ Intaleq Map Style Loaded. Initializing...');
|
||||
Log.print('🗺️ Siro Map Style Loaded. Initializing...');
|
||||
isStyleLoaded = true;
|
||||
await _loadMapIcons();
|
||||
|
||||
@@ -161,6 +162,14 @@ class MapEngineController extends GetxController {
|
||||
await _addMapImage('orange_marker', 'assets/images/moto1.png');
|
||||
await _addMapImage('violet_marker', 'assets/images/lady1.png');
|
||||
|
||||
try {
|
||||
final walkBytes = await _createWalkMarkerBytes();
|
||||
await mapController?.addImage('walk_icon', walkBytes);
|
||||
Log.print('delimited: successfully added dynamic walk_icon');
|
||||
} catch (e) {
|
||||
Log.print('❌ Error loading dynamic walk icon: $e');
|
||||
}
|
||||
|
||||
isIconsLoaded = true;
|
||||
markers = markers.map((m) => m.copyWith()).toSet();
|
||||
update();
|
||||
@@ -799,6 +808,44 @@ class MapEngineController extends GetxController {
|
||||
update();
|
||||
}
|
||||
|
||||
Future<Uint8List> _createWalkMarkerBytes() async {
|
||||
final ui.PictureRecorder pictureRecorder = ui.PictureRecorder();
|
||||
final Canvas canvas = Canvas(pictureRecorder);
|
||||
const double size = 60.0;
|
||||
|
||||
final Paint paint = Paint()..color = const Color(0xFF0288D1);
|
||||
final Paint borderPaint = Paint()
|
||||
..color = Colors.white
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = 3.0;
|
||||
|
||||
canvas.drawCircle(const Offset(size / 2, size / 2), size / 2.5, paint);
|
||||
canvas.drawCircle(
|
||||
const Offset(size / 2, size / 2), size / 2.5, borderPaint);
|
||||
|
||||
TextPainter iconPainter = TextPainter(textDirection: TextDirection.ltr);
|
||||
iconPainter.text = TextSpan(
|
||||
text: String.fromCharCode(Icons.directions_walk.codePoint),
|
||||
style: TextStyle(
|
||||
fontSize: 30.0,
|
||||
fontFamily: Icons.directions_walk.fontFamily,
|
||||
color: Colors.white,
|
||||
),
|
||||
);
|
||||
iconPainter.layout();
|
||||
iconPainter.paint(
|
||||
canvas,
|
||||
Offset((size - iconPainter.width) / 2, (size - iconPainter.height) / 2),
|
||||
);
|
||||
|
||||
final ui.Image image = await pictureRecorder
|
||||
.endRecording()
|
||||
.toImage(size.toInt(), size.toInt());
|
||||
final ByteData? data =
|
||||
await image.toByteData(format: ui.ImageByteFormat.png);
|
||||
return data!.buffer.asUint8List();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_animationTimers.forEach((key, timer) => timer.cancel());
|
||||
|
||||
@@ -846,6 +846,7 @@ class RideLifecycleController extends GetxController {
|
||||
|
||||
rideIsBeginPassengerTimer();
|
||||
runWhenRideIsBegin();
|
||||
_updatePassengerWalkLine();
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -1730,7 +1731,7 @@ class RideLifecycleController extends GetxController {
|
||||
String generateTrackingLink(String rideId, String driverId) {
|
||||
String cleanRideId = rideId.toString().trim();
|
||||
String cleanDriverId = driverId.toString().trim();
|
||||
const String secretSalt = "Intaleq_Secure_Track_2025";
|
||||
const String secretSalt = "Siro_Secure_Track_2025";
|
||||
|
||||
String rawString = "$cleanRideId$cleanDriverId$secretSalt";
|
||||
var bytes = utf8.encode(rawString);
|
||||
@@ -2260,6 +2261,7 @@ class RideLifecycleController extends GetxController {
|
||||
}
|
||||
|
||||
mapEngine.fitCameraToPoints(driverPos, passengerPos);
|
||||
_updatePassengerWalkLine();
|
||||
update();
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -2386,6 +2388,7 @@ class RideLifecycleController extends GetxController {
|
||||
),
|
||||
};
|
||||
}
|
||||
_updatePassengerWalkLine();
|
||||
update();
|
||||
}
|
||||
}
|
||||
@@ -3508,9 +3511,29 @@ class RideLifecycleController extends GetxController {
|
||||
|
||||
LatLngBounds boundsObj =
|
||||
LatLngBounds(northeast: northeastBound, southwest: southwestBound);
|
||||
var cameraUpdate = CameraUpdate.newLatLngBounds(boundsObj,
|
||||
left: 180, top: 180, right: 180, bottom: 180);
|
||||
mapController!.animateCamera(cameraUpdate);
|
||||
|
||||
final latDiff = (northeastBound.latitude - southwestBound.latitude).abs();
|
||||
final lngDiff = (northeastBound.longitude - southwestBound.longitude).abs();
|
||||
|
||||
if (latDiff < 0.0001 || lngDiff < 0.0001) {
|
||||
final center = LatLng(
|
||||
(northeastBound.latitude + southwestBound.latitude) / 2,
|
||||
(northeastBound.longitude + southwestBound.longitude) / 2,
|
||||
);
|
||||
mapController!.animateCamera(CameraUpdate.newLatLngZoom(center, 17));
|
||||
} else {
|
||||
try {
|
||||
var cameraUpdate = CameraUpdate.newLatLngBounds(boundsObj,
|
||||
left: 180, top: 180, right: 180, bottom: 180);
|
||||
mapController!.animateCamera(cameraUpdate);
|
||||
} catch (e) {
|
||||
final center = LatLng(
|
||||
(northeastBound.latitude + southwestBound.latitude) / 2,
|
||||
(northeastBound.longitude + southwestBound.longitude) / 2,
|
||||
);
|
||||
mapController!.animateCamera(CameraUpdate.newLatLngZoom(center, 17));
|
||||
}
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -4562,4 +4585,82 @@ class RideLifecycleController extends GetxController {
|
||||
sinLng;
|
||||
return 2 * R * atan2(pow(h, 0.5).toDouble(), pow(1 - h, 0.5).toDouble());
|
||||
}
|
||||
|
||||
// دالة لبناء الخط المنقط
|
||||
List<Polyline> _buildDashedLine(LatLng start, LatLng end,
|
||||
{required Color color, required String prefixId}) {
|
||||
List<Polyline> segments = [];
|
||||
double dist = Geolocator.distanceBetween(
|
||||
start.latitude, start.longitude, end.latitude, end.longitude);
|
||||
|
||||
const double dashLengthMeters = 8.0;
|
||||
const double gapLengthMeters = 6.0;
|
||||
|
||||
double latDiff = end.latitude - start.latitude;
|
||||
double lngDiff = end.longitude - start.longitude;
|
||||
|
||||
double totalLength = 0;
|
||||
int segmentCount = 0;
|
||||
|
||||
while (totalLength < dist) {
|
||||
double startFraction = totalLength / dist;
|
||||
double endFraction = (totalLength + dashLengthMeters) / dist;
|
||||
|
||||
if (endFraction > 1.0) {
|
||||
endFraction = 1.0;
|
||||
}
|
||||
|
||||
double startLat = start.latitude + latDiff * startFraction;
|
||||
double startLng = start.longitude + lngDiff * startFraction;
|
||||
double endLat = start.latitude + latDiff * endFraction;
|
||||
double endLng = start.longitude + lngDiff * endFraction;
|
||||
|
||||
segments.add(
|
||||
Polyline(
|
||||
polylineId: PolylineId('${prefixId}_dash_$segmentCount'),
|
||||
points: [LatLng(startLat, startLng), LatLng(endLat, endLng)],
|
||||
color: color,
|
||||
width: 4,
|
||||
),
|
||||
);
|
||||
segmentCount++;
|
||||
totalLength += dashLengthMeters + gapLengthMeters;
|
||||
}
|
||||
return segments;
|
||||
}
|
||||
|
||||
// تحديث الخط المنقط ومكان أيقونة المشي للراكب
|
||||
void _updatePassengerWalkLine() {
|
||||
polyLines.removeWhere(
|
||||
(p) => p.polylineId.value.startsWith('passenger_walk_line'));
|
||||
markers.removeWhere((m) => m.markerId.value == 'walk_end_marker');
|
||||
|
||||
bool shouldShowWalkPath =
|
||||
(statusRide == 'Apply' || statusRide == 'Arrived') &&
|
||||
_currentDriverRoutePoints.isNotEmpty &&
|
||||
passengerLocation.latitude != 0;
|
||||
|
||||
if (shouldShowWalkPath) {
|
||||
final LatLng lastRoadPt = _currentDriverRoutePoints.last;
|
||||
|
||||
final walkDashes = _buildDashedLine(
|
||||
lastRoadPt,
|
||||
passengerLocation,
|
||||
color: Colors.blueGrey,
|
||||
prefixId: 'passenger_walk_line',
|
||||
);
|
||||
polyLines.addAll(walkDashes);
|
||||
|
||||
markers.add(
|
||||
Marker(
|
||||
markerId: const MarkerId('walk_end_marker'),
|
||||
position: lastRoadPt,
|
||||
icon: InlqBitmap.fromStyleImage('walk_icon'),
|
||||
anchor: const Offset(0.5, 0.5),
|
||||
),
|
||||
);
|
||||
}
|
||||
mapEngine.update();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -291,25 +291,25 @@ class UiInteractionsController extends GetxController {
|
||||
rideLifecycle.rideId, rideLifecycle.driverId);
|
||||
|
||||
String message = """
|
||||
مرحباً، تابع رحلتي مباشرة على تطبيق انطلق 🚗
|
||||
مرحباً، تابع رحلتي مباشرة على تطبيق سيرو 🚗
|
||||
|
||||
يمكنك تتبع مسار الرحلة من هنا:
|
||||
$trackingLink
|
||||
|
||||
السائق: ${rideLifecycle.passengerName}
|
||||
السيارة: ${rideLifecycle.model} - ${rideLifecycle.licensePlate}
|
||||
شكراً لاستخدامك انطلق!
|
||||
شكراً لاستخدامك سيرو!
|
||||
"""
|
||||
.tr;
|
||||
|
||||
String messageEn = """Hello, follow my trip live on Intaleq 🚗
|
||||
String messageEn = """Hello, follow my trip live on Siro 🚗
|
||||
|
||||
Track my ride here:
|
||||
$trackingLink
|
||||
|
||||
Driver: ${rideLifecycle.passengerName}
|
||||
Car: ${rideLifecycle.model} - ${rideLifecycle.licensePlate}
|
||||
Thank you for using Intaleq!
|
||||
Thank you for using Siro!
|
||||
""";
|
||||
|
||||
String userLanguage = box.read(BoxName.lang) ?? 'ar';
|
||||
@@ -362,7 +362,7 @@ Thank you for using Intaleq!
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Text(
|
||||
"Send Intaleq app to him".tr,
|
||||
"Send Siro app to him".tr,
|
||||
style: AppStyle.title
|
||||
.copyWith(color: AppColor.greenColor, fontSize: 14),
|
||||
textAlign: TextAlign.center,
|
||||
@@ -379,14 +379,14 @@ Thank you for using Intaleq!
|
||||
|
||||
var message = '''Dear Friend,
|
||||
|
||||
🚀 I have just started an exciting trip on Intaleq!
|
||||
🚀 I have just started an exciting trip on Siro!
|
||||
Download the app to track my ride:
|
||||
|
||||
👉 Android: https://play.google.com/store/apps/details?id=com.Intaleq.intaleq&hl=en-US
|
||||
👉 iOS: https://apps.apple.com/st/app/intaleq-rider/id6748075179
|
||||
👉 Android: https://play.google.com/store/apps/details?id=com.Siro.siro&hl=en-US
|
||||
👉 iOS: https://apps.apple.com/st/app/siro-rider/id6748075179
|
||||
|
||||
See you there!
|
||||
Intaleq Team''';
|
||||
Siro Team''';
|
||||
|
||||
launchCommunication('whatsapp', phone, message);
|
||||
},
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
// formSearchPlaces(3),
|
||||
// ];
|
||||
|
||||
// IntaleqMapController? mapController;
|
||||
// SiroMapController? mapController;
|
||||
// bool isStyleLoaded = false;
|
||||
|
||||
// Set<Marker> markers = {};
|
||||
@@ -3930,7 +3930,7 @@
|
||||
// String cleanDriverId = driverId.toString().trim();
|
||||
|
||||
// // الكلمة السرية للمطابقة مع السيرفر
|
||||
// const String secretSalt = "Intaleq_Secure_Track_2025";
|
||||
// const String secretSalt = "Siro_Secure_Track_2025";
|
||||
|
||||
// // الدمج والتشفير
|
||||
// String rawString = "$cleanRideId$cleanDriverId$secretSalt";
|
||||
@@ -4006,25 +4006,25 @@
|
||||
// // 4. تجهيز الرسالة (بالإنجليزية وجاهزة للترجمة)
|
||||
// // لاحظ: استخدمت المتغيرات الموجودة في الكنترولر (passengerName هنا عادة يحمل اسم السائق في الكنترولر الخاص بك حسب الكود السابق)
|
||||
// String message = """
|
||||
// مرحباً، تابع رحلتي مباشرة على تطبيق انطلق 🚗
|
||||
// مرحباً، تابع رحلتي مباشرة على تطبيق سيرو 🚗
|
||||
|
||||
// يمكنك تتبع مسار الرحلة من هنا:
|
||||
// $trackingLink
|
||||
|
||||
// السائق: $passengerName
|
||||
// السيارة: $model - $licensePlate
|
||||
// شكراً لاستخدامك انطلق!
|
||||
// شكراً لاستخدامك سيرو!
|
||||
// """
|
||||
// .tr;
|
||||
|
||||
// String messageEn = """Hello, follow my trip live on Intaleq 🚗
|
||||
// String messageEn = """Hello, follow my trip live on Siro 🚗
|
||||
|
||||
// Track my ride here:
|
||||
// $trackingLink
|
||||
|
||||
// Driver: $passengerName
|
||||
// Car: $model - $licensePlate
|
||||
// Thank you for using Intaleq!
|
||||
// Thank you for using Siro!
|
||||
// """;
|
||||
|
||||
// // اختر الرسالة بناءً على اللغة المفضلة (مثال بسيط)
|
||||
@@ -4131,7 +4131,7 @@
|
||||
// ),
|
||||
// const SizedBox(height: 10),
|
||||
// Text(
|
||||
// "Send Intaleq app to him".tr,
|
||||
// "Send Siro app to him".tr,
|
||||
// style: AppStyle.title
|
||||
// .copyWith(color: AppColor.greenColor, fontSize: 14),
|
||||
// textAlign: TextAlign.center,
|
||||
@@ -4152,14 +4152,14 @@
|
||||
// // تصحيح نص الرسالة
|
||||
// var message = '''Dear Friend,
|
||||
|
||||
// 🚀 I have just started an exciting trip on Intaleq!
|
||||
// 🚀 I have just started an exciting trip on Siro!
|
||||
// Download the app to track my ride:
|
||||
|
||||
// 👉 Android: https://play.google.com/store/apps/details?id=com.Intaleq.intaleq&hl=en-US
|
||||
// 👉 iOS: https://apps.apple.com/st/app/intaleq-rider/id6748075179
|
||||
// 👉 Android: https://play.google.com/store/apps/details?id=com.Siro.siro&hl=en-US
|
||||
// 👉 iOS: https://apps.apple.com/st/app/siro-rider/id6748075179
|
||||
|
||||
// See you there!
|
||||
// Intaleq Team''';
|
||||
// Siro Team''';
|
||||
|
||||
// launchCommunication('whatsapp', phone, message);
|
||||
// }),
|
||||
@@ -4518,7 +4518,7 @@
|
||||
// if (mapController != null) {
|
||||
// mapController!.animateCamera(CameraUpdate.newLatLng(
|
||||
// currentPos)); // Optional: Follow car if needed
|
||||
// // Note: IntaleqMapController doesn't expose raw symbol update yet for Marker object,
|
||||
// // Note: SiroMapController doesn't expose raw symbol update yet for Marker object,
|
||||
// // but declarative update via GetBuilder is fast.
|
||||
// }
|
||||
|
||||
@@ -5451,13 +5451,13 @@
|
||||
// );
|
||||
// }
|
||||
|
||||
// void onMapCreated(IntaleqMapController controller) {
|
||||
// void onMapCreated(SiroMapController controller) {
|
||||
// mapController = controller;
|
||||
// update();
|
||||
// }
|
||||
|
||||
// void onStyleLoaded() async {
|
||||
// Log.print('🗺️ Intaleq Map Style Loaded. Initializing...');
|
||||
// Log.print('🗺️ Siro Map Style Loaded. Initializing...');
|
||||
// isStyleLoaded = true;
|
||||
// _loadMapIcons();
|
||||
|
||||
|
||||
@@ -49,9 +49,9 @@ class InviteController extends GetxController {
|
||||
Future<void> shareDriverCode() async {
|
||||
if (driverCouponCode != null) {
|
||||
final String shareText = '''
|
||||
${'Join Intaleq as a driver using my referral code!'.tr}
|
||||
${'Join Siro as a driver using my referral code!'.tr}
|
||||
${'Use code:'.tr} $driverCouponCode
|
||||
${'Download the Intaleq Driver app now and earn rewards!'.tr}
|
||||
${'Download the Siro Driver app now and earn rewards!'.tr}
|
||||
''';
|
||||
await Share.share(shareText);
|
||||
}
|
||||
@@ -60,9 +60,9 @@ ${'Download the Intaleq Driver app now and earn rewards!'.tr}
|
||||
Future<void> sharePassengerCode() async {
|
||||
if (couponCode != null) {
|
||||
final String shareText = '''
|
||||
${'Get a discount on your first Intaleq ride!'.tr}
|
||||
${'Get a discount on your first Siro ride!'.tr}
|
||||
${'Use my referral code:'.tr} $couponCode
|
||||
${'Download the Intaleq app now and enjoy your ride!'.tr}
|
||||
${'Download the Siro app now and enjoy your ride!'.tr}
|
||||
''';
|
||||
await Share.share(shareText);
|
||||
}
|
||||
@@ -243,14 +243,14 @@ ${'Download the Intaleq app now and enjoy your ride!'.tr}
|
||||
|
||||
// New and improved WhatsApp message for better user engagement.
|
||||
String message =
|
||||
"👋 ${'Hello! I\'m inviting you to try Intaleq.'.tr}\n\n"
|
||||
"👋 ${'Hello! I\'m inviting you to try Siro.'.tr}\n\n"
|
||||
"🎁 ${'Use my invitation code to get a special gift on your first ride!'.tr}\n\n"
|
||||
"${'Your personal invitation code is:'.tr}\n"
|
||||
"*$inviteCode*\n\n"
|
||||
"⏳ ${'Be sure to use it quickly! This code expires at'.tr} *$expirationTime*.\n\n"
|
||||
"📲 ${'Download the app now:'.tr}\n"
|
||||
"• *Android:* https://play.google.com/store/apps/details?id=com.Intaleq.intaleq\n"
|
||||
"• *iOS:* https://apps.apple.com/st/app/intaleq-rider/id6748075179\n\n"
|
||||
"• *Android:* https://play.google.com/store/apps/details?id=com.Siro.siro\n"
|
||||
"• *iOS:* https://apps.apple.com/st/app/siro-rider/id6748075179\n\n"
|
||||
"${'See you on the road!'.tr} 🚗";
|
||||
|
||||
launchCommunication('whatsapp', formattedPhoneNumber, message);
|
||||
|
||||
@@ -183,18 +183,18 @@ class SplashScreenController extends GetxController
|
||||
final List<String> msgs = passengerMessages ?? const [];
|
||||
if (msgs.isEmpty) {
|
||||
controller.scheduleNotificationsForSevenDays(
|
||||
'Intaleq', 'مرحباً بك! تابع رحلاتك بأمان مع انطلق.', "tone1");
|
||||
'Siro', 'مرحباً بك! تابع رحلاتك بأمان مع سيرو.', "tone1");
|
||||
} else {
|
||||
final rnd = Random();
|
||||
final raw = msgs[rnd.nextInt(msgs.length)];
|
||||
final parts = raw.split(':');
|
||||
final title = parts.isNotEmpty ? parts.first.trim() : 'Intaleq';
|
||||
final title = parts.isNotEmpty ? parts.first.trim() : 'Siro';
|
||||
final body = parts.length > 1
|
||||
? parts.sublist(1).join(':').trim()
|
||||
: 'مرحباً بك! تابع رحلاتك بأمان مع انطلق.';
|
||||
: 'مرحباً بك! تابع رحلاتك بأمان مع سيرو.';
|
||||
controller.scheduleNotificationsForSevenDays(
|
||||
title.isEmpty ? 'Intaleq' : title,
|
||||
body.isEmpty ? 'مرحباً بك! تابع رحلاتك بأمان مع انطلق.' : body,
|
||||
title.isEmpty ? 'Siro' : title,
|
||||
body.isEmpty ? 'مرحباً بك! تابع رحلاتك بأمان مع سيرو.' : body,
|
||||
"tone1");
|
||||
}
|
||||
} catch (e, st) {
|
||||
|
||||
@@ -23,7 +23,7 @@ class TripMonitorController extends GetxController {
|
||||
double rotation = 0;
|
||||
double speed = 0;
|
||||
bool isStyleLoaded = false;
|
||||
|
||||
|
||||
Set<Marker> markers = {};
|
||||
|
||||
getLocationParent() async {
|
||||
@@ -36,7 +36,7 @@ class TripMonitorController extends GetxController {
|
||||
double.parse(tripData['message'][0]['longitude'].toString()));
|
||||
rotation = double.parse(tripData['message'][0]['heading'].toString());
|
||||
speed = double.parse(tripData['message'][0]['speed'].toString());
|
||||
|
||||
|
||||
_updateMarker();
|
||||
update();
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -272,7 +272,7 @@ class PaymobBillingDataWallet {
|
||||
(box.read(BoxName.name).toString().split(' ')[0]).toString(),
|
||||
"last_name":
|
||||
(box.read(BoxName.name).toString().split(' ')[1]).toString() ??
|
||||
'Intaleq',
|
||||
'Siro',
|
||||
"phone_number": (box.read(BoxName.phoneWallet)),
|
||||
"apartment": apartment ?? "NA",
|
||||
"floor": floor ?? "NA",
|
||||
|
||||
Reference in New Issue
Block a user