25-11-18/1
This commit is contained in:
@@ -316,14 +316,12 @@ Download the Intaleq app now and enjoy your ride!
|
||||
/// Formats a phone number to the standard Syrian international format (+963...).
|
||||
String _formatSyrianPhoneNumber(String input) {
|
||||
String digitsOnly = input.replaceAll(RegExp(r'\D'), '');
|
||||
if (digitsOnly.startsWith('963')) {
|
||||
return '+$digitsOnly';
|
||||
}
|
||||
|
||||
if (digitsOnly.startsWith('09') && digitsOnly.length == 10) {
|
||||
return '+963${digitsOnly.substring(1)}';
|
||||
return '963${digitsOnly.substring(1)}';
|
||||
}
|
||||
if (digitsOnly.length == 9 && digitsOnly.startsWith('9')) {
|
||||
return '+963$digitsOnly';
|
||||
return '963$digitsOnly';
|
||||
}
|
||||
return input; // Fallback for unrecognized formats
|
||||
}
|
||||
@@ -386,7 +384,7 @@ Download the Intaleq app now and enjoy your ride!
|
||||
});
|
||||
|
||||
if (response != 'failure') {
|
||||
var d = jsonDecode(response);
|
||||
var d = (response);
|
||||
mySnackbarSuccess('Invite sent successfully'.tr);
|
||||
String message = '${'*Intaleq APP CODE*'.tr}\n\n'
|
||||
'${"Use this code in registration".tr}\n\n'
|
||||
|
||||
@@ -150,7 +150,7 @@ class LoginDriverController extends GetxController {
|
||||
// Log.print('response.request: ${response1.request}');
|
||||
// Log.print('response.body: ${response1.body}');
|
||||
// print(payload);
|
||||
Log.print('payment["jwt"]: ${jsonDecode(response1.body)['jwt']}');
|
||||
// Log.print('payment["jwt"]: ${jsonDecode(response1.body)['jwt']}');
|
||||
await box.write(BoxName.hmac, jsonDecode(response1.body)['hmac']);
|
||||
return jsonDecode(response1.body)['jwt'].toString();
|
||||
}
|
||||
@@ -199,7 +199,7 @@ class LoginDriverController extends GetxController {
|
||||
'password': box.read(BoxName.emailDriver),
|
||||
'aud': '${AK.allowed}$dev',
|
||||
};
|
||||
print(payload);
|
||||
// print(payload);
|
||||
var response1 = await http.post(
|
||||
Uri.parse(AppLink.loginJwtDriver),
|
||||
body: payload,
|
||||
@@ -263,7 +263,7 @@ class LoginDriverController extends GetxController {
|
||||
// 'email': email ?? 'yet',
|
||||
'id': driverID,
|
||||
});
|
||||
Log.print('res: ${res}');
|
||||
// Log.print('res: ${res}');
|
||||
if (res == 'failure') {
|
||||
await isPhoneVerified();
|
||||
isloading = false; // <--- أضفت هذا أيضاً
|
||||
|
||||
@@ -47,11 +47,13 @@ class PhoneAuthHelper {
|
||||
}
|
||||
|
||||
/// Verifies the OTP and logs the user in.
|
||||
static Future<void> verifyOtp(String phoneNumber, String otp) async {
|
||||
static Future<void> verifyOtp(String phoneNumber) async {
|
||||
try {
|
||||
final response = await CRUD().post(
|
||||
link: _verifyOtpUrl,
|
||||
payload: {'phone_number': phoneNumber, 'otp': otp},
|
||||
payload: {
|
||||
'phone_number': phoneNumber,
|
||||
},
|
||||
);
|
||||
|
||||
if (response != 'failure') {
|
||||
|
||||
@@ -386,6 +386,7 @@ class LocationController extends GetxController {
|
||||
final String driverId =
|
||||
(box.read(BoxName.driverID) ?? '').toString().trim();
|
||||
if (driverId.isEmpty) return; // لا ترسل بدون DriverID
|
||||
final String deviceTimestamp = DateTime.now().toIso8601String();
|
||||
|
||||
// ✅ كل شيء Strings فقط
|
||||
final Map<String, String> payload = {
|
||||
@@ -398,6 +399,7 @@ class LocationController extends GetxController {
|
||||
'distance': safeDistKm.toStringAsFixed(2),
|
||||
'status': driverStatus,
|
||||
'carType': (box.read(BoxName.carType) ?? 'default').toString(),
|
||||
'device_timestamp': deviceTimestamp,
|
||||
};
|
||||
|
||||
try {
|
||||
|
||||
@@ -199,7 +199,7 @@ class DeviceHelper {
|
||||
|
||||
// Generate and return the encrypted fingerprint
|
||||
final String fingerprint = '${deviceId}_${deviceModel}_$osVersion';
|
||||
Log.print('fingerprint: ${fingerprint}');
|
||||
// Log.print('fingerprint: ${fingerprint}');
|
||||
// print(EncryptionHelper.instance.encryptData(fingerprint));
|
||||
return (fingerprint);
|
||||
} catch (e) {
|
||||
|
||||
@@ -35,7 +35,7 @@ class DurationController extends GetxController {
|
||||
getStaticDriver() async {
|
||||
isLoading = true;
|
||||
update();
|
||||
var res = await CRUD().get(
|
||||
var res = await CRUD().getWallet(
|
||||
link: AppLink.driverStatistic,
|
||||
payload: {'driverID': box.read(BoxName.driverID)});
|
||||
if (res == 'failure') {
|
||||
|
||||
@@ -3,7 +3,11 @@ import 'dart:convert';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
// import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||
// import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||
// import 'package:latlong2/latlong.dart'
|
||||
// as latlng; // هذا مهم جداً للتعامل مع إحداثيات OSM
|
||||
import 'package:sefer_driver/constant/box_name.dart';
|
||||
import 'package:sefer_driver/controller/home/captin/map_driver_controller.dart';
|
||||
import 'dart:async';
|
||||
@@ -54,7 +58,9 @@ class HomeCaptainController extends GetxController {
|
||||
bool mapTrafficON = false;
|
||||
double widthMapTypeAndTraffic = 50;
|
||||
// Inject the LocationController class
|
||||
final locationController = Get.put(LocationController());
|
||||
// final locationController = Get.put(LocationController());
|
||||
// الكود الصحيح
|
||||
final locationController = Get.find<LocationController>();
|
||||
// final locationBackController = Get.put(LocationBackgroundController());
|
||||
String formatDuration(Duration duration) {
|
||||
String twoDigits(int n) => n.toString().padLeft(2, "0");
|
||||
@@ -181,31 +187,24 @@ class HomeCaptainController extends GetxController {
|
||||
}
|
||||
|
||||
// late GoogleMapController mapHomeCaptainController;
|
||||
// void onMapCreated(GoogleMapController controller) {
|
||||
// mapHomeCaptainController = controller;
|
||||
// controller.getVisibleRegion();
|
||||
// // Animate camera to user location (optional)
|
||||
// controller.animateCamera(
|
||||
// CameraUpdate.newLatLng(Get.find<LocationController>().myLocation),
|
||||
// );
|
||||
// }
|
||||
GoogleMapController? mapHomeCaptainController; // Nullable controller
|
||||
|
||||
GoogleMapController? mapHomeCaptainController;
|
||||
void onMapCreated(GoogleMapController controller) {
|
||||
mapHomeCaptainController = controller;
|
||||
|
||||
// Optional: Check if the controller is still null (just for safety)
|
||||
if (mapHomeCaptainController != null) {
|
||||
// Get the visible region
|
||||
controller.getVisibleRegion();
|
||||
|
||||
// Animate camera to user location (optional)
|
||||
controller.animateCamera(
|
||||
CameraUpdate.newLatLng(Get.find<LocationController>().myLocation),
|
||||
);
|
||||
} else {}
|
||||
controller.getVisibleRegion();
|
||||
// Animate camera to user location (optional)
|
||||
controller.animateCamera(
|
||||
CameraUpdate.newLatLng(Get.find<LocationController>().myLocation),
|
||||
);
|
||||
}
|
||||
|
||||
// قم بإنشائه مباشرة
|
||||
// final MapController mapController = MapController();
|
||||
// bool isMapReady = false;
|
||||
// void onMapReady() {
|
||||
// isMapReady = true;
|
||||
// print("Map is ready to be moved!");
|
||||
// }
|
||||
|
||||
void savePeriod(Duration period) {
|
||||
final periods = box.read<List<dynamic>>(BoxName.periods) ?? [];
|
||||
periods.add(period.inSeconds);
|
||||
@@ -279,10 +278,25 @@ class HomeCaptainController extends GetxController {
|
||||
getAllPayment();
|
||||
startPeriodicExecution();
|
||||
getCaptainWalletFromBuyPoints();
|
||||
onMapCreated(mapHomeCaptainController!);
|
||||
// onMapCreated(mapHomeCaptainController!);
|
||||
// totalPoints = Get.find<CaptainWalletController>().totalPoints.toString();
|
||||
getRefusedOrderByCaptain();
|
||||
box.write(BoxName.statusDriverLocation, 'off');
|
||||
locationController.addListener(() {
|
||||
// فقط إذا كان السائق "متصل" والخريطة جاهزة
|
||||
if (isActive && mapHomeCaptainController != null) {
|
||||
mapHomeCaptainController!.animateCamera(
|
||||
CameraUpdate.newCameraPosition(
|
||||
CameraPosition(
|
||||
target: locationController.myLocation, // الموقع الجديد
|
||||
zoom: 17.5,
|
||||
tilt: 50.0,
|
||||
bearing: locationController.heading, // اتجاه السيارة
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
});
|
||||
// LocationController().getLocation();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ import '../../../views/home/Captin/home_captain/home_captin.dart';
|
||||
import '../../firebase/firbase_messge.dart';
|
||||
import '../../firebase/notification_service.dart';
|
||||
import '../../functions/crud.dart';
|
||||
import '../../functions/encrypt_decrypt.dart';
|
||||
import '../../functions/location_controller.dart';
|
||||
import '../../functions/tts.dart';
|
||||
|
||||
@@ -210,12 +209,16 @@ class MapDriverController extends GetxController {
|
||||
tone: 'cancel',
|
||||
driverList: [], category: "Cancel Trip from driver",
|
||||
);
|
||||
await CRUD().post(
|
||||
link: "${AppLink.seferCairoServer}/ride/rides/update.php",
|
||||
payload: {
|
||||
"id": (rideId).toString(), // Convert to String
|
||||
"status": 'CancelFromDriverAfterApply'
|
||||
});
|
||||
await CRUD()
|
||||
.post(link: "${AppLink.server}/ride/rides/update.php", payload: {
|
||||
"id": (rideId).toString(), // Convert to String
|
||||
"status": 'CancelFromDriverAfterApply'
|
||||
});
|
||||
await CRUD()
|
||||
.post(link: "${AppLink.rideServer}/rides/update.php", payload: {
|
||||
"id": (rideId).toString(), // Convert to String
|
||||
"status": 'CancelFromDriverAfterApply'
|
||||
});
|
||||
CRUD().postFromDialogue(
|
||||
link: '${AppLink.seferCairoServer}/driver_order/add.php',
|
||||
payload: {
|
||||
@@ -226,37 +229,13 @@ class MapDriverController extends GetxController {
|
||||
});
|
||||
await CRUD().post(
|
||||
link:
|
||||
"${AppLink.seferCairoServer}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php",
|
||||
"${AppLink.server}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php",
|
||||
payload: {
|
||||
"order_id": (rideId).toString(),
|
||||
"driver_id": box.read(BoxName.driverID).toString(),
|
||||
"status": 'reject After Applied',
|
||||
"notes": (cancelTripCotroller.text).toString()
|
||||
});
|
||||
if (AppLink.endPoint != AppLink.seferCairoServer) {
|
||||
CRUD()
|
||||
.post(link: "${AppLink.endPoint}/ride/rides/update.php", payload: {
|
||||
"id": (rideId).toString(), // Convert to String
|
||||
"status": 'CancelFromDriverAfterApply'
|
||||
});
|
||||
CRUD().postFromDialogue(
|
||||
link: '${AppLink.endPoint}/driver_order/add.php',
|
||||
payload: {
|
||||
'driver_id': box.read(BoxName.driverID).toString(),
|
||||
// box.read(BoxName.driverID).toString(),
|
||||
'order_id': (rideId).toString(),
|
||||
'status': 'CancelFromDriverAfterApply'
|
||||
});
|
||||
CRUD().post(
|
||||
link:
|
||||
"${AppLink.endPoint}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php",
|
||||
payload: {
|
||||
"order_id": (rideId).toString(),
|
||||
"driver_id": box.read(BoxName.driverID).toString(),
|
||||
"status": 'reject After Applied',
|
||||
"notes": (cancelTripCotroller.text).toString()
|
||||
});
|
||||
}
|
||||
|
||||
sql.insertData({
|
||||
'order_id': (rideId),
|
||||
@@ -331,13 +310,17 @@ class MapDriverController extends GetxController {
|
||||
box.write(BoxName.rideStatus, 'Applied');
|
||||
Log.print('rideStatus from map 304 : ${box.read(BoxName.rideStatus)}');
|
||||
update();
|
||||
await CRUD().post(
|
||||
link: "${AppLink.seferCairoServer}/ride/rides/update.php",
|
||||
payload: {
|
||||
'id': (rideId),
|
||||
'driverGoToPassengerTime': DateTime.now().toString(),
|
||||
'status': 'Applied'
|
||||
});
|
||||
await CRUD()
|
||||
.post(link: "${AppLink.server}/ride/rides/update.php", payload: {
|
||||
'id': (rideId),
|
||||
'driverGoToPassengerTime': DateTime.now().toString(),
|
||||
'status': 'Applied'
|
||||
});
|
||||
CRUD().post(link: "${AppLink.rideServer}/ride/rides/update.php", payload: {
|
||||
'id': (rideId),
|
||||
'driverGoToPassengerTime': DateTime.now().toString(),
|
||||
'status': 'Applied'
|
||||
});
|
||||
|
||||
NotificationService.sendNotification(
|
||||
target: tokenPassenger.toString(),
|
||||
@@ -378,12 +361,37 @@ class MapDriverController extends GetxController {
|
||||
var res = await CRUD().post(link: AppLink.getDriverScam, payload: {
|
||||
'driverID': box.read(BoxName.driverID),
|
||||
});
|
||||
|
||||
if (res == 'failure') {
|
||||
box.write(BoxName.statusDriverLocation, 'off');
|
||||
return '0';
|
||||
}
|
||||
var d = jsonDecode(res);
|
||||
return d['message'][0]['count'];
|
||||
var d = (res);
|
||||
Log.print('d: ${d}');
|
||||
|
||||
// 1. Check if the response status is 'failure' (API level check)
|
||||
if (d['status'] == 'failure') {
|
||||
// If the API status is failure, the message is a String (e.g., 'No ride scam record found')
|
||||
// and there's no 'count' array to read.
|
||||
return '0';
|
||||
}
|
||||
|
||||
// 2. Safely access the List/Map structure for 'count'
|
||||
// This assumes a successful response looks like:
|
||||
// {'status': 'success', 'message': [{'count': '12'}]}
|
||||
var messageData = d['message'];
|
||||
|
||||
// Check if messageData is actually a List before accessing index [0]
|
||||
if (messageData is List &&
|
||||
messageData.isNotEmpty &&
|
||||
messageData[0] is Map) {
|
||||
return messageData[0]['count'];
|
||||
}
|
||||
|
||||
// Fallback if the successful data structure is unexpected
|
||||
return '0';
|
||||
|
||||
// --- FIX END ---
|
||||
}
|
||||
|
||||
void startRideFromStartApp() {
|
||||
@@ -429,6 +437,11 @@ class MapDriverController extends GetxController {
|
||||
'rideTimeStart': DateTime.now().toString(),
|
||||
'status': 'Begin',
|
||||
});
|
||||
CRUD().post(link: "${AppLink.server}/ride/rides/update.php", payload: {
|
||||
'id': (rideId),
|
||||
'rideTimeStart': DateTime.now().toString(),
|
||||
'status': 'Begin',
|
||||
});
|
||||
CRUD().post(link: AppLink.addDriverOrder, payload: {
|
||||
'driver_id': box.read(BoxName.driverID).toString(),
|
||||
'order_id': (rideId).toString(),
|
||||
@@ -547,18 +560,6 @@ class MapDriverController extends GetxController {
|
||||
'status': 'CancelAfterWait'
|
||||
});
|
||||
|
||||
if (AppLink.endPoint != AppLink.seferCairoServer) {
|
||||
CRUD().post(link: "${AppLink.endPoint}/rides/update.php", payload: {
|
||||
'id': (rideId),
|
||||
'rideTimeStart': DateTime.now().toString(),
|
||||
'status': 'CancelAfterWait',
|
||||
});
|
||||
CRUD().post(link: "${AppLink.endPoint}/rides/update.php", payload: {
|
||||
'driver_id': box.read(BoxName.driverID).toString(),
|
||||
'order_id': (rideId).toString(),
|
||||
'status': 'CancelAfterWait'
|
||||
});
|
||||
}
|
||||
var paymentTokenWait =
|
||||
await generateTokenDriver(costOfWaiting5Minute.toString());
|
||||
var res = await CRUD().post(link: AppLink.addDrivePayment, payload: {
|
||||
@@ -734,7 +735,11 @@ class MapDriverController extends GetxController {
|
||||
List<Future<dynamic>> apiCalls = [];
|
||||
|
||||
apiCalls.add(CRUD().post(
|
||||
link: "${AppLink.seferCairoServer}/ride/rides//finish_ride_updates.php",
|
||||
link: "${AppLink.rideServer}/ride/rides/finish_ride_updates.php",
|
||||
payload: rideUpdatePayload,
|
||||
));
|
||||
apiCalls.add(CRUD().post(
|
||||
link: "${AppLink.ride}/rides/finish_ride_updates.php",
|
||||
payload: rideUpdatePayload,
|
||||
));
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ class NavigationView extends StatelessWidget {
|
||||
myLocationEnabled: false,
|
||||
myLocationButtonEnabled: false,
|
||||
compassEnabled: false,
|
||||
zoomControlsEnabled: false,
|
||||
zoomControlsEnabled: false, buildingsEnabled: false,
|
||||
// تعديل الـ padding لإعطاء مساحة للعناصر العلوية والسفلية
|
||||
// مساحة أكبر في الأعلى للبحث + النتائج، ومساحة أكبر بالأسفل للملاحة
|
||||
padding: EdgeInsets.only(
|
||||
|
||||
@@ -50,7 +50,17 @@ class MyTranslation extends Translations {
|
||||
"message From Driver": "رسالة من السائق",
|
||||
"Trip is Begin": "بدأت الرحلة",
|
||||
'Rides': 'الرحلات',
|
||||
"Invalid customer MSISDN": "رقم هاتف العميل غير صالح",
|
||||
'Your Activity': 'نشاطك',
|
||||
"Customer MSISDN doesn’t have customer wallet":
|
||||
"رقم هاتف العميل لا يحتوي على محفظة عميل",
|
||||
'Please enter the number without the leading 0':
|
||||
'يرجى إدخال الرقم بدون الصفر الأولي',
|
||||
'witout zero': 'بدون صفر',
|
||||
'You Can Cancel the Trip and get Cost From ':
|
||||
'يمكنك إلغاء الرحلة واسترداد التكلفة من ',
|
||||
'Please enter your phone number': 'يرجى إدخال رقم هاتفك',
|
||||
'Phone number seems too short': 'يبدو أن رقم الهاتف قصير جدًا',
|
||||
'You have upload Criminal documents': 'لقد قمت بتحميل وثائق جنائية',
|
||||
'Close': 'إغلاق',
|
||||
"Cancel Trip from driver": "إلغاء الرحلة من السائق",
|
||||
|
||||
Reference in New Issue
Block a user