25-11-18/1
This commit is contained in:
@@ -2,7 +2,10 @@ import 'dart:io';
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:bubble_head/bubble.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; // لإحداثيات العرض
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -32,14 +35,15 @@ import 'widget/left_menu_map_captain.dart';
|
||||
class HomeCaptain extends StatelessWidget {
|
||||
HomeCaptain({super.key});
|
||||
|
||||
final LocationController locationController = Get.put(LocationController());
|
||||
final LocationController locationController =
|
||||
Get.put(LocationController(), permanent: true);
|
||||
final HomeCaptainController homeCaptainController =
|
||||
Get.put(HomeCaptainController());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// Initial calls remain the same.
|
||||
Get.put(HomeCaptainController());
|
||||
// Get.put(HomeCaptainController());
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||
closeOverlayIfFound();
|
||||
checkForUpdate(context);
|
||||
@@ -201,21 +205,19 @@ class _MapView extends StatelessWidget {
|
||||
// هذا الـ Builder يستمع إلى تحديثات الموقع
|
||||
return GetBuilder<LocationController>(
|
||||
builder: (locationController) {
|
||||
// --- هذا هو الكود الجديد ---
|
||||
// نقوم بتحريك الكاميرا يدوياً عند كل تحديث للموقع
|
||||
if (homeController.mapHomeCaptainController != null &&
|
||||
homeController.isActive) {
|
||||
homeController.mapHomeCaptainController!.animateCamera(
|
||||
CameraUpdate.newCameraPosition(
|
||||
CameraPosition(
|
||||
target: locationController.myLocation, // الموقع الجديد
|
||||
zoom: 17.5, // تقريب لمتابعة السائق
|
||||
tilt: 50.0, // زاوية رؤية 3D
|
||||
bearing: locationController.heading, // اتجاه السيارة
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
// if (homeController.mapHomeCaptainController != null &&
|
||||
// homeController.isActive) {
|
||||
// homeController.mapHomeCaptainController!.animateCamera(
|
||||
// CameraUpdate.newCameraPosition(
|
||||
// CameraPosition(
|
||||
// target: locationController.myLocation, // الموقع الجديد
|
||||
// zoom: 17.5, // تقريب لمتابعة السائق
|
||||
// tilt: 50.0, // زاوية رؤية 3D
|
||||
// bearing: locationController.heading, // اتجاه السيارة
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// --- نهاية الكود الجديد ---
|
||||
|
||||
// إرجاع الخريطة
|
||||
@@ -248,6 +250,71 @@ class _MapView extends StatelessWidget {
|
||||
compassEnabled: false,
|
||||
zoomControlsEnabled: false,
|
||||
);
|
||||
// --- الكود الجديد ---
|
||||
|
||||
// // تحويل الإحداثيات من جوجل (إذا كنت لا تزال تستخدمها) إلى latlong2
|
||||
// final latlng.LatLng currentCarPosition = latlng.LatLng(
|
||||
// locationController.myLocation.latitude,
|
||||
// locationController.myLocation.longitude);
|
||||
|
||||
// return FlutterMap(
|
||||
// // 1. تمرير الـ Controller الذي أنشأناه في الخطوة 2
|
||||
// mapController: homeController.mapController,
|
||||
|
||||
// options: MapOptions(
|
||||
// // 2. هذا بديل initialCameraPosition
|
||||
// initialCenter: currentCarPosition,
|
||||
// initialZoom: 15,
|
||||
// // هذا بديل padding
|
||||
// // (ملاحظة: flutter_map لا يدعم padding مباشرة، قد تحتاج لتعديل الواجهة
|
||||
// // أو استخدام خاصية nonRotatedChildren لبدائل أخرى)
|
||||
|
||||
// // هذا بديل minMaxZoomPreference
|
||||
// minZoom: 12,
|
||||
// maxZoom: 16, onMapReady: homeController.onMapReady,
|
||||
// ),
|
||||
|
||||
// // 3. الخرائط في flutter_map عبارة عن "طبقات" (Layers)
|
||||
// children: [
|
||||
// // --- الطبقة الأولى: الخريطة الأساسية (OSM) ---
|
||||
// TileLayer(
|
||||
// urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
// userAgentPackageName:
|
||||
// 'com.your.app.name', // هام: ضع اسم تطبيقك هنا
|
||||
// ),
|
||||
|
||||
// // --- (اختياري) طبقة القمر الصناعي بناءً على MapType ---
|
||||
// if (controller.mapType) // إذا كنت لا تزال تستخدم mapType
|
||||
// // TileLayer(
|
||||
// // // ملاحظة: هذا الرابط يحتاج مفتاح API من MapTiler أو مزود آخر
|
||||
// // urlTemplate:
|
||||
// // 'https://api.maptiler.com/maps/satellite/{z}/{x}/{y}.jpg?key=YOUR_API_KEY',
|
||||
// // userAgentPackageName: 'com.your.app.name',
|
||||
// // ),
|
||||
|
||||
// // --- الطبقة الثانية: أيقونة السيارة (Marker) ---
|
||||
// MarkerLayer(
|
||||
// markers: [
|
||||
// Marker(
|
||||
// point: currentCarPosition, // الإحداثيات
|
||||
// width: 80,
|
||||
// height: 80,
|
||||
// child: Transform.rotate(
|
||||
// // 4. هذا بديل rotation
|
||||
// angle: locationController.heading *
|
||||
// (3.1415926535 / 180), // تحويل من درجات إلى راديان
|
||||
// // 5. هذا بديل carIcon (أصبح أسهل!)
|
||||
// child: Image.asset(
|
||||
// 'assets/images/car.png', // نفس المسار الذي استخدمته من قبل
|
||||
// width: 30, // الحجم الذي حددته في addCustomCarIcon
|
||||
// height: 35,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ],
|
||||
// );
|
||||
},
|
||||
);
|
||||
},
|
||||
|
||||
@@ -215,7 +215,7 @@ Future<void> checkForPendingOrderFromServer() async {
|
||||
|
||||
try {
|
||||
// You need to create this CRUD method
|
||||
var response = await CRUD().get(
|
||||
var response = await CRUD().post(
|
||||
link: AppLink.getArgumentAfterAppliedFromBackground,
|
||||
payload: {'driver_id': driverId},
|
||||
);
|
||||
|
||||
@@ -249,16 +249,9 @@ class PassengerInfoWindow extends StatelessWidget {
|
||||
return MyElevatedButton(
|
||||
title: 'You Can Cancel the Trip and get Cost From '.tr +
|
||||
AppInformation.appName.tr,
|
||||
kolor: AppColor.deepPurpleAccent,
|
||||
kolor: AppColor.gold,
|
||||
onPressed: () {
|
||||
MyDialog().getDialog('Are you sure to cancel?'.tr, '', () async {
|
||||
// fcm.sendNotificationToDriverMAP(
|
||||
// 'Driver Cancelled Your Trip',
|
||||
// 'You will need to pay the cost to the driver, or it will be deducted from your next trip'
|
||||
// .tr,
|
||||
// controller.tokenPassenger,
|
||||
// [],
|
||||
// 'cancel.wav');
|
||||
NotificationService.sendNotification(
|
||||
target: controller.tokenPassenger.toString(),
|
||||
title: 'Driver Cancelled Your Trip'.tr,
|
||||
|
||||
@@ -276,6 +276,7 @@ class _OrderRequestPageState extends State<OrderRequestPage> {
|
||||
.tr,
|
||||
'', () {
|
||||
Get.back();
|
||||
// Get.back();
|
||||
});
|
||||
} else {
|
||||
await CRUD().postFromDialogue(
|
||||
|
||||
@@ -356,27 +356,26 @@ class OrderSpeedRequest extends StatelessWidget {
|
||||
Get.put(HomeCaptainController()).changeRideId();
|
||||
box.write(BoxName.statusDriverLocation, 'on');
|
||||
var res = await CRUD().post(
|
||||
link: AppLink.updateStausFromSpeed,
|
||||
payload: {
|
||||
'id': rideId,
|
||||
'rideTimeStart':
|
||||
DateTime.now().toString(),
|
||||
'status': 'Apply',
|
||||
'driver_id': box.read(BoxName.driverID),
|
||||
});
|
||||
if (AppLink.endPoint !=
|
||||
AppLink.seferCairoServer) {
|
||||
CRUD().post(
|
||||
link:
|
||||
"${AppLink.rideServer}/rides/updateStausFromSpeed.php",
|
||||
payload: {
|
||||
'id': rideId,
|
||||
'rideTimeStart':
|
||||
DateTime.now().toString(),
|
||||
'status': 'Apply',
|
||||
'driver_id': box.read(BoxName.driverID),
|
||||
});
|
||||
}
|
||||
link: AppLink.updateStausFromSpeed,
|
||||
payload: {
|
||||
'id': rideId,
|
||||
'rideTimeStart': DateTime.now().toString(),
|
||||
'status': 'Apply',
|
||||
'driver_id': box.read(BoxName.driverID),
|
||||
},
|
||||
);
|
||||
|
||||
CRUD().post(
|
||||
link:
|
||||
"${AppLink.server}/ride/rides/updateStausFromSpeed.php",
|
||||
payload: {
|
||||
'id': rideId,
|
||||
'rideTimeStart': DateTime.now().toString(),
|
||||
'status': 'Apply',
|
||||
'driver_id': box.read(BoxName.driverID),
|
||||
},
|
||||
);
|
||||
|
||||
if (res != "failure") {
|
||||
box.write(BoxName.statusDriverLocation, 'on');
|
||||
controller.changeApplied();
|
||||
@@ -419,17 +418,14 @@ class OrderSpeedRequest extends StatelessWidget {
|
||||
'status': 'Apply'
|
||||
});
|
||||
|
||||
if (AppLink.endPoint !=
|
||||
AppLink.seferCairoServer) {
|
||||
CRUD().post(
|
||||
link:
|
||||
"${AppLink.rideServer}/driver_order/add.php",
|
||||
payload: {
|
||||
'driver_id': _getData(6),
|
||||
'order_id': rideId,
|
||||
'status': 'Apply'
|
||||
});
|
||||
}
|
||||
CRUD().post(
|
||||
link:
|
||||
"${AppLink.rideServer}/driver_order/add.php",
|
||||
payload: {
|
||||
'driver_id': _getData(6),
|
||||
'order_id': rideId,
|
||||
'status': 'Apply'
|
||||
});
|
||||
|
||||
Get.back(); // Go back from order request screen
|
||||
box.write(BoxName.rideArguments, {
|
||||
|
||||
@@ -66,48 +66,48 @@ class PointsCaptain extends StatelessWidget {
|
||||
color: AppColor.blueColor, size: 70),
|
||||
],
|
||||
)),
|
||||
// GestureDetector(
|
||||
// onTap: () async {
|
||||
// Get.back();
|
||||
// Get.defaultDialog(
|
||||
// barrierDismissible: false,
|
||||
// title: 'Insert Wallet phone number'.tr,
|
||||
// content: Form(
|
||||
// key: paymentController.formKey,
|
||||
// child: MyTextForm(
|
||||
// controller:
|
||||
// paymentController.walletphoneController,
|
||||
// label: 'Insert Wallet phone number'.tr,
|
||||
// hint: '963941234567',
|
||||
// type: TextInputType.phone)),
|
||||
// confirm: MyElevatedButton(
|
||||
// title: 'OK'.tr,
|
||||
// onPressed: () async {
|
||||
// Get.back();
|
||||
// if (paymentController.formKey.currentState!
|
||||
// .validate()) {
|
||||
// box.write(
|
||||
// BoxName.phoneWallet,
|
||||
// paymentController
|
||||
// .walletphoneController.text);
|
||||
// await payWithMTNWallet(
|
||||
// context, pricePoint.toString(), 'SYP');
|
||||
// }
|
||||
// }));
|
||||
// },
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
// children: [
|
||||
// Text('Pay by MTN Wallet'.tr),
|
||||
// const SizedBox(width: 10),
|
||||
// Image.asset(
|
||||
// 'assets/images/cashMTN.png',
|
||||
// width: 70,
|
||||
// height: 70,
|
||||
// fit: BoxFit.fill,
|
||||
// ),
|
||||
// ],
|
||||
// )),
|
||||
GestureDetector(
|
||||
onTap: () async {
|
||||
Get.back();
|
||||
Get.defaultDialog(
|
||||
barrierDismissible: false,
|
||||
title: 'Insert Wallet phone number'.tr,
|
||||
content: Form(
|
||||
key: paymentController.formKey,
|
||||
child: MyTextForm(
|
||||
controller:
|
||||
paymentController.walletphoneController,
|
||||
label: 'Insert Wallet phone number'.tr,
|
||||
hint: '963941234567',
|
||||
type: TextInputType.phone)),
|
||||
confirm: MyElevatedButton(
|
||||
title: 'OK'.tr,
|
||||
onPressed: () async {
|
||||
Get.back();
|
||||
if (paymentController.formKey.currentState!
|
||||
.validate()) {
|
||||
box.write(
|
||||
BoxName.phoneWallet,
|
||||
paymentController
|
||||
.walletphoneController.text);
|
||||
await payWithMTNWallet(
|
||||
context, pricePoint.toString(), 'SYP');
|
||||
}
|
||||
}));
|
||||
},
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text('Pay by MTN Wallet'.tr),
|
||||
const SizedBox(width: 10),
|
||||
Image.asset(
|
||||
'assets/images/cashMTN.png',
|
||||
width: 70,
|
||||
height: 70,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
],
|
||||
)),
|
||||
|
||||
GestureDetector(
|
||||
onTap: () async {
|
||||
|
||||
Reference in New Issue
Block a user