diff --git a/android/app/build.gradle b/android/app/build.gradle index 58f1122..06aad37 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -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 { diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart index 4a42660..afe8350 100755 --- a/lib/controller/firebase/firbase_messge.dart +++ b/lib/controller/firebase/firbase_messge.dart @@ -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 diff --git a/lib/controller/home/captin/home_captain_controller.dart b/lib/controller/home/captin/home_captain_controller.dart index ca7e284..69519e4 100755 --- a/lib/controller/home/captin/home_captain_controller.dart +++ b/lib/controller/home/captin/home_captain_controller.dart @@ -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 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 _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 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 data) { + Set 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(); diff --git a/lib/views/home/Captin/home_captain/home_captin.dart b/lib/views/home/Captin/home_captain/home_captin.dart index 6e9ec8f..f14ec4b 100755 --- a/lib/views/home/Captin/home_captain/home_captin.dart +++ b/lib/views/home/Captin/home_captain/home_captin.dart @@ -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( + 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