25-11-18/1

This commit is contained in:
Hamza-Ayed
2025-11-18 10:38:11 +03:00
parent a69e4c6912
commit b1b8efdd7d
19 changed files with 294 additions and 199 deletions

View File

@@ -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') {

View File

@@ -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();
}

View File

@@ -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,
));

View File

@@ -37,7 +37,7 @@ class NavigationView extends StatelessWidget {
myLocationEnabled: false,
myLocationButtonEnabled: false,
compassEnabled: false,
zoomControlsEnabled: false,
zoomControlsEnabled: false, buildingsEnabled: false,
// تعديل الـ padding لإعطاء مساحة للعناصر العلوية والسفلية
// مساحة أكبر في الأعلى للبحث + النتائج، ومساحة أكبر بالأسفل للملاحة
padding: EdgeInsets.only(