25-12-2/1
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user