25-12-2/1

This commit is contained in:
Hamza-Ayed
2025-12-02 10:47:31 +03:00
parent 9b1008a0bf
commit 374f9e9bf3
4 changed files with 108 additions and 3 deletions

View File

@@ -44,8 +44,8 @@ android {
applicationId = "com.intaleq_driver"
minSdkVersion = 23
targetSdk = 36
versionCode = 47
versionName = '1.0.47' // I've used the higher version name
versionCode = 48
versionName = '1.0.48' // I've used the higher version name
multiDexEnabled = true
ndk {

View File

@@ -118,7 +118,7 @@ class FirebaseMessagesController extends GetxController {
driverToken = myList[14].toString();
Get.put(HomeCaptainController()).changeRideId();
update();
Get.to(() => OrderSpeedRequest(), arguments: {
Get.to(() => OrderRequestPage(), arguments: {
'myListString': myListString,
'DriverList': myList,
'body': body

View File

@@ -3,9 +3,11 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'dart:ui' as ui; // للألوان
// 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:http/http.dart' as http;
// import 'package:latlong2/latlong.dart'
// as latlng; // هذا مهم جداً للتعامل مع إحداثيات OSM
import 'package:sefer_driver/constant/box_name.dart';
@@ -57,6 +59,11 @@ class HomeCaptainController extends GetxController {
bool mapType = false;
bool mapTrafficON = false;
double widthMapTypeAndTraffic = 50;
// === متغيرات الهيت ماب الجديدة ===
bool isHeatmapVisible = false;
Set<Polygon> heatmapPolygons =
{}; // سنستخدم Polygon لرسم المربعات على جوجل مابس
// Inject the LocationController class
// final locationController = Get.put(LocationController());
// الكود الصحيح
@@ -69,6 +76,83 @@ class HomeCaptainController extends GetxController {
return "${duration.inHours}:$twoDigitMinutes:$twoDigitSeconds";
}
// دالة لتغيير حالة الهيت ماب (عرض/إخفاء)
void toggleHeatmap() async {
isHeatmapVisible = !isHeatmapVisible;
if (isHeatmapVisible) {
await _fetchAndDrawHeatmap();
} else {
heatmapPolygons.clear();
}
update(); // تحديث الواجهة
}
// دالة جلب البيانات ورسمها
Future<void> _fetchAndDrawHeatmap() async {
isLoading = true;
update();
// استبدل هذا الرابط برابط ملف JSON الذي يولده كود PHP
// مثال: https://your-domain.com/api/driver/heatmap_data.json
final String jsonUrl =
"https://rides.intaleq.xyz/intaleq/ride/heatmap/heatmap_data.json";
try {
final response = await http.get(Uri.parse(jsonUrl));
if (response.statusCode == 200) {
final List<dynamic> data = json.decode(response.body);
_generateGoogleMapPolygons(data);
} else {
print("Failed to load heatmap data");
}
} catch (e) {
print("Error fetching heatmap: $e");
} finally {
isLoading = false;
update();
}
} // تحويل البيانات إلى مربعات على خريطة جوجل
void _generateGoogleMapPolygons(List<dynamic> data) {
Set<Polygon> tempPolygons = {};
// نصف قطر المربع (تقريباً 0.0005 يعادل 50-60 متر، مما يعطي مربع 100 متر)
// يجب أن يتناسب مع الـ precision المستخدم في PHP
double offset = 0.005;
for (var point in data) {
double lat = double.parse(point['lat'].toString());
double lng = double.parse(point['lng'].toString());
int count = int.parse(point['count'].toString());
// تحديد اللون بناءً على الكثافة
Color color;
if (count >= 5) {
color = Colors.red.withOpacity(0.5); // عالي جداً
} else if (count >= 3) {
color = Colors.orange.withOpacity(0.5); // متوسط
} else {
color = Colors.green.withOpacity(0.4); // منخفض
}
// إنشاء المربع
tempPolygons.add(Polygon(
polygonId: PolygonId("$lat-$lng"),
points: [
LatLng(lat - offset, lng - offset),
LatLng(lat + offset, lng - offset),
LatLng(lat + offset, lng + offset),
LatLng(lat - offset, lng + offset),
],
fillColor: color,
strokeColor: color.withOpacity(0.8),
strokeWidth: 1,
visible: true,
));
}
heatmapPolygons = tempPolygons;
}
void goToWalletFromConnect() {
Get.back();
Get.back();

View File

@@ -134,16 +134,32 @@ class _HomeAppBar extends StatelessWidget implements PreferredSizeWidget {
child: Row(
children: [
_MapControlButton(
iconColor: Colors.blue,
icon: Icons.satellite_alt,
tooltip: 'Change Map Type'.tr,
onPressed: homeCaptainController.changeMapType,
),
_MapControlButton(
iconColor: Colors.blue,
icon: Icons.streetview_sharp,
tooltip: 'Toggle Traffic'.tr,
onPressed: homeCaptainController.changeMapTraffic,
),
GetBuilder<HomeCaptainController>(
builder: (controller) {
return _MapControlButton(
// تغيير الأيقونة واللون بناءً على الحالة
icon: Icons.local_fire_department,
iconColor: controller.isHeatmapVisible
? Colors.orange
: Colors.grey,
tooltip: 'Show Heatmap'.tr,
onPressed: controller.toggleHeatmap,
);
},
),
_MapControlButton(
iconColor: Colors.blue,
icon: Icons.my_location, // Changed for clarity
tooltip: 'Center on Me'.tr,
onPressed: () {
@@ -225,12 +241,16 @@ class _MapView extends StatelessWidget {
padding: const EdgeInsets.only(bottom: 110, top: 300),
fortyFiveDegreeImageryEnabled: true,
onMapCreated: controller.onMapCreated,
// onCameraMove: controller.onCameraMove,
minMaxZoomPreference: const MinMaxZoomPreference(6, 18),
initialCameraPosition: CameraPosition(
target: locationController.myLocation,
zoom: 15,
),
// --- تم حذف onCameraMove الخاطئ ---
// === إضافة الطبقة الحرارية هنا ===
polygons: controller.heatmapPolygons,
// =
markers: {
Marker(
markerId: MarkerId('MyLocation'.tr),
@@ -538,6 +558,7 @@ class _MapControlButton extends StatelessWidget {
required this.icon,
required this.onPressed,
required this.tooltip,
required MaterialColor iconColor,
});
@override