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

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