2026-04-03-maplibra primary succsess
This commit is contained in:
1801
assets/style.json
Normal file
1801
assets/style.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -84,12 +84,6 @@ PODS:
|
|||||||
- geolocator_apple (1.2.0):
|
- geolocator_apple (1.2.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- Google-Maps-iOS-Utils (6.1.3):
|
|
||||||
- GoogleMaps (~> 10.0)
|
|
||||||
- google_maps_flutter_ios (0.0.1):
|
|
||||||
- Flutter
|
|
||||||
- Google-Maps-iOS-Utils (< 7.0, >= 5.0)
|
|
||||||
- GoogleMaps (< 11.0, >= 8.4)
|
|
||||||
- google_sign_in_ios (0.0.1):
|
- google_sign_in_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
@@ -98,9 +92,6 @@ PODS:
|
|||||||
- GoogleDataTransport (10.1.0):
|
- GoogleDataTransport (10.1.0):
|
||||||
- nanopb (~> 3.30910.0)
|
- nanopb (~> 3.30910.0)
|
||||||
- PromisesObjC (~> 2.4)
|
- PromisesObjC (~> 2.4)
|
||||||
- GoogleMaps (10.8.0):
|
|
||||||
- GoogleMaps/Maps (= 10.8.0)
|
|
||||||
- GoogleMaps/Maps (10.8.0)
|
|
||||||
- GoogleSignIn (9.1.0):
|
- GoogleSignIn (9.1.0):
|
||||||
- AppAuth (~> 2.0)
|
- AppAuth (~> 2.0)
|
||||||
- AppCheckCore (~> 11.0)
|
- AppCheckCore (~> 11.0)
|
||||||
@@ -157,6 +148,10 @@ PODS:
|
|||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- location (0.0.1):
|
- location (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- MapLibre (6.19.1)
|
||||||
|
- maplibre_gl (0.25.0):
|
||||||
|
- Flutter
|
||||||
|
- MapLibre (= 6.19.1)
|
||||||
- nanopb (3.30910.0):
|
- nanopb (3.30910.0):
|
||||||
- nanopb/decode (= 3.30910.0)
|
- nanopb/decode (= 3.30910.0)
|
||||||
- nanopb/encode (= 3.30910.0)
|
- nanopb/encode (= 3.30910.0)
|
||||||
@@ -268,7 +263,6 @@ DEPENDENCIES:
|
|||||||
- flutter_secure_storage_darwin (from `.symlinks/plugins/flutter_secure_storage_darwin/darwin`)
|
- flutter_secure_storage_darwin (from `.symlinks/plugins/flutter_secure_storage_darwin/darwin`)
|
||||||
- flutter_tts (from `.symlinks/plugins/flutter_tts/ios`)
|
- flutter_tts (from `.symlinks/plugins/flutter_tts/ios`)
|
||||||
- geolocator_apple (from `.symlinks/plugins/geolocator_apple/darwin`)
|
- geolocator_apple (from `.symlinks/plugins/geolocator_apple/darwin`)
|
||||||
- google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
|
|
||||||
- google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`)
|
- google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`)
|
||||||
- image_cropper (from `.symlinks/plugins/image_cropper/ios`)
|
- image_cropper (from `.symlinks/plugins/image_cropper/ios`)
|
||||||
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
||||||
@@ -277,6 +271,7 @@ DEPENDENCIES:
|
|||||||
- live_activities (from `.symlinks/plugins/live_activities/ios`)
|
- live_activities (from `.symlinks/plugins/live_activities/ios`)
|
||||||
- local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`)
|
- local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`)
|
||||||
- location (from `.symlinks/plugins/location/ios`)
|
- location (from `.symlinks/plugins/location/ios`)
|
||||||
|
- maplibre_gl (from `.symlinks/plugins/maplibre_gl/ios`)
|
||||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||||
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
|
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
|
||||||
- quick_actions_ios (from `.symlinks/plugins/quick_actions_ios/ios`)
|
- quick_actions_ios (from `.symlinks/plugins/quick_actions_ios/ios`)
|
||||||
@@ -304,14 +299,13 @@ SPEC REPOS:
|
|||||||
- FirebaseCoreInternal
|
- FirebaseCoreInternal
|
||||||
- FirebaseInstallations
|
- FirebaseInstallations
|
||||||
- FirebaseMessaging
|
- FirebaseMessaging
|
||||||
- Google-Maps-iOS-Utils
|
|
||||||
- GoogleDataTransport
|
- GoogleDataTransport
|
||||||
- GoogleMaps
|
|
||||||
- GoogleSignIn
|
- GoogleSignIn
|
||||||
- GoogleUtilities
|
- GoogleUtilities
|
||||||
- GTMAppAuth
|
- GTMAppAuth
|
||||||
- GTMSessionFetcher
|
- GTMSessionFetcher
|
||||||
- IOSSecuritySuite
|
- IOSSecuritySuite
|
||||||
|
- MapLibre
|
||||||
- nanopb
|
- nanopb
|
||||||
- PromisesObjC
|
- PromisesObjC
|
||||||
- RecaptchaInterop
|
- RecaptchaInterop
|
||||||
@@ -355,8 +349,6 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/flutter_tts/ios"
|
:path: ".symlinks/plugins/flutter_tts/ios"
|
||||||
geolocator_apple:
|
geolocator_apple:
|
||||||
:path: ".symlinks/plugins/geolocator_apple/darwin"
|
:path: ".symlinks/plugins/geolocator_apple/darwin"
|
||||||
google_maps_flutter_ios:
|
|
||||||
:path: ".symlinks/plugins/google_maps_flutter_ios/ios"
|
|
||||||
google_sign_in_ios:
|
google_sign_in_ios:
|
||||||
:path: ".symlinks/plugins/google_sign_in_ios/darwin"
|
:path: ".symlinks/plugins/google_sign_in_ios/darwin"
|
||||||
image_cropper:
|
image_cropper:
|
||||||
@@ -373,6 +365,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/local_auth_darwin/darwin"
|
:path: ".symlinks/plugins/local_auth_darwin/darwin"
|
||||||
location:
|
location:
|
||||||
:path: ".symlinks/plugins/location/ios"
|
:path: ".symlinks/plugins/location/ios"
|
||||||
|
maplibre_gl:
|
||||||
|
:path: ".symlinks/plugins/maplibre_gl/ios"
|
||||||
package_info_plus:
|
package_info_plus:
|
||||||
:path: ".symlinks/plugins/package_info_plus/ios"
|
:path: ".symlinks/plugins/package_info_plus/ios"
|
||||||
permission_handler_apple:
|
permission_handler_apple:
|
||||||
@@ -426,11 +420,8 @@ SPEC CHECKSUMS:
|
|||||||
flutter_secure_storage_darwin: acdb3f316ed05a3e68f856e0353b133eec373a23
|
flutter_secure_storage_darwin: acdb3f316ed05a3e68f856e0353b133eec373a23
|
||||||
flutter_tts: 35ac3c7d42412733e795ea96ad2d7e05d0a75113
|
flutter_tts: 35ac3c7d42412733e795ea96ad2d7e05d0a75113
|
||||||
geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e
|
geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e
|
||||||
Google-Maps-iOS-Utils: bed22fa703c919259b3901449434d60d994fae20
|
|
||||||
google_maps_flutter_ios: 0cf046caf50b00d95071f79e8031fcd5ef902beb
|
|
||||||
google_sign_in_ios: 000870aa06da9b28d1d0bf7ef70ff0213059dd28
|
google_sign_in_ios: 000870aa06da9b28d1d0bf7ef70ff0213059dd28
|
||||||
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
|
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
|
||||||
GoogleMaps: fe4035acb768ed14ce732811363f232550ba55af
|
|
||||||
GoogleSignIn: fcee2257188d5eda57a5e2b6a715550ffff9206d
|
GoogleSignIn: fcee2257188d5eda57a5e2b6a715550ffff9206d
|
||||||
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
|
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
|
||||||
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
|
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
|
||||||
@@ -443,6 +434,8 @@ SPEC CHECKSUMS:
|
|||||||
live_activities: 4dfa736d0736e1c77866a2f9c056a76513cc9e7b
|
live_activities: 4dfa736d0736e1c77866a2f9c056a76513cc9e7b
|
||||||
local_auth_darwin: c3ee6cce0a8d56be34c8ccb66ba31f7f180aaebb
|
local_auth_darwin: c3ee6cce0a8d56be34c8ccb66ba31f7f180aaebb
|
||||||
location: 155caecf9da4f280ab5fe4a55f94ceccfab838f8
|
location: 155caecf9da4f280ab5fe4a55f94ceccfab838f8
|
||||||
|
MapLibre: 7f24faba45439f80ccb0f83393c29fa32cb81952
|
||||||
|
maplibre_gl: a2114567cbd1065866614fbd34dfb75ab782aaa2
|
||||||
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
|
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
|
||||||
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
|
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
|
||||||
permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d
|
permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 70;
|
objectVersion = 54;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
|
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
|
||||||
C663DBEB2F50907200D79908 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
|
C663DBEB2F50907200D79908 /* Exceptions for "RideWidget" folder in "RideWidgetExtension" target */ = {
|
||||||
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
|
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
|
||||||
membershipExceptions = (
|
membershipExceptions = (
|
||||||
Info.plist,
|
Info.plist,
|
||||||
@@ -131,7 +131,18 @@
|
|||||||
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
|
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
|
||||||
|
|
||||||
/* Begin PBXFileSystemSynchronizedRootGroup section */
|
/* Begin PBXFileSystemSynchronizedRootGroup section */
|
||||||
C663DBD82F50907000D79908 /* RideWidget */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (C663DBEB2F50907200D79908 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = RideWidget; sourceTree = "<group>"; };
|
C663DBD82F50907000D79908 /* RideWidget */ = {
|
||||||
|
isa = PBXFileSystemSynchronizedRootGroup;
|
||||||
|
exceptions = (
|
||||||
|
C663DBEB2F50907200D79908 /* Exceptions for "RideWidget" folder in "RideWidgetExtension" target */,
|
||||||
|
);
|
||||||
|
explicitFileTypes = {
|
||||||
|
};
|
||||||
|
explicitFolders = (
|
||||||
|
);
|
||||||
|
path = RideWidget;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXFileSystemSynchronizedRootGroup section */
|
/* End PBXFileSystemSynchronizedRootGroup section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@@ -295,6 +306,7 @@
|
|||||||
C663DBE72F50907200D79908 /* Embed Foundation Extensions */,
|
C663DBE72F50907200D79908 /* Embed Foundation Extensions */,
|
||||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
||||||
9DE0D475D98797EEBEE003BD /* [CP] Copy Pods Resources */,
|
9DE0D475D98797EEBEE003BD /* [CP] Copy Pods Resources */,
|
||||||
|
B77A6F719CDC97DC7270EA70 /* [CP] Embed Pods Frameworks */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@@ -469,19 +481,32 @@
|
|||||||
inputFileListPaths = (
|
inputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
);
|
);
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "[CP] Copy Pods Resources";
|
name = "[CP] Copy Pods Resources";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
);
|
);
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
|
B77A6F719CDC97DC7270EA70 /* [CP] Embed Pods Frameworks */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
|
);
|
||||||
|
name = "[CP] Embed Pods Frameworks";
|
||||||
|
outputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
C6C3FB403E5DB104310DE9A1 /* [CP] Check Pods Manifest.lock */ = {
|
C6C3FB403E5DB104310DE9A1 /* [CP] Check Pods Manifest.lock */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import Flutter
|
import Flutter
|
||||||
import FirebaseCore
|
import FirebaseCore
|
||||||
import GoogleMaps
|
|
||||||
|
|
||||||
@main
|
@main
|
||||||
@objc class AppDelegate: FlutterAppDelegate {
|
@objc class AppDelegate: FlutterAppDelegate {
|
||||||
@@ -11,11 +10,7 @@ import GoogleMaps
|
|||||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||||||
) -> Bool {
|
) -> Bool {
|
||||||
|
|
||||||
// --- 1. تهيئة خرائط جوجل ---
|
|
||||||
// يتأكد من وجود ملف Config.plist ويقرأ المفتاح منه
|
|
||||||
if let config = loadConfig(), let apiKey = config["APIKey"] as? String {
|
|
||||||
GMSServices.provideAPIKey(apiKey)
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- 2. تهيئة Firebase ---
|
// --- 2. تهيئة Firebase ---
|
||||||
FirebaseApp.configure()
|
FirebaseApp.configure()
|
||||||
@@ -87,13 +82,7 @@ import GoogleMaps
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadConfig() -> [String: Any]? {
|
|
||||||
guard let path = Bundle.main.path(forResource: "Config", ofType: "plist"),
|
|
||||||
let config = NSDictionary(contentsOfFile: path) as? [String: Any] else {
|
|
||||||
fatalError("Couldn't find Config.plist file. Please add it to your project.")
|
|
||||||
}
|
|
||||||
return config
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- الامتدادات (Extensions) من الكود القديم ---
|
// --- الامتدادات (Extensions) من الكود القديم ---
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// في ملف: constant/country_polygons.dart
|
// في ملف: constant/country_polygons.dart
|
||||||
|
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
|
|
||||||
class CountryPolygons {
|
class CountryPolygons {
|
||||||
// ==========================================================
|
// ==========================================================
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class AppLink {
|
|||||||
/// هذا الرابط خاص برحلات الركاب، ويستخدمه السيرفر الجانبي للرحلات (Ride Server Side) للتعامل مع عمليات إلغاء الرحلات وتحديث حالة الرحلات وغيرها من العمليات المتعلقة بالرحلات.
|
/// هذا الرابط خاص برحلات الركاب، ويستخدمه السيرفر الجانبي للرحلات (Ride Server Side) للتعامل مع عمليات إلغاء الرحلات وتحديث حالة الرحلات وغيرها من العمليات المتعلقة بالرحلات.
|
||||||
/// https://routesy.intaleq.xyz for syria
|
/// https://routesy.intaleq.xyz for syria
|
||||||
/// for jordan https://routesjo.intaleq.xyz
|
/// for jordan https://routesjo.intaleq.xyz
|
||||||
static String routesOsm = 'https://routesy.intaleq.xyz';
|
static String routesOsm = 'https://routesjo.intaleq.xyz';
|
||||||
|
|
||||||
///https://location.intaleq.xyz/intaleq/ride/location
|
///https://location.intaleq.xyz/intaleq/ride/location
|
||||||
///locationServerSide هو السيرفر الجانبي الخاص بموقع السائقين، حيث يتم إرسال تحديثات الموقع من التطبيق إلى هذا السيرفر، ومن ثم يقوم هذا السيرفر بتوزيع هذه التحديثات إلى الركاب المتصلين الذين يتابعون السائق في الوقت الحقيقي.
|
///locationServerSide هو السيرفر الجانبي الخاص بموقع السائقين، حيث يتم إرسال تحديثات الموقع من التطبيق إلى هذا السيرفر، ومن ثم يقوم هذا السيرفر بتوزيع هذه التحديثات إلى الركاب المتصلين الذين يتابعون السائق في الوقت الحقيقي.
|
||||||
@@ -42,7 +42,7 @@ class AppLink {
|
|||||||
|
|
||||||
static String test = "$server/test.php";
|
static String test = "$server/test.php";
|
||||||
//===============firebase==========================
|
//===============firebase==========================
|
||||||
static String getTokens = "$server/ride/firebase/getTokensPassenger.php.php";
|
static String getTokens = "$server/ride/firebase/getTokensPassenger.php";
|
||||||
static String getTokenParent = "$server/ride/firebase/getTokenParent.php";
|
static String getTokenParent = "$server/ride/firebase/getTokenParent.php";
|
||||||
static String addTokens = "$server/ride/firebase/add.php";
|
static String addTokens = "$server/ride/firebase/add.php";
|
||||||
static String addFingerPrint = "$paymentServer/ride/firebase/add.php";
|
static String addFingerPrint = "$paymentServer/ride/firebase/add.php";
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
|
|
||||||
class UniversitiesPolygons {
|
class UniversitiesPolygons {
|
||||||
// AUC polygon points
|
// AUC polygon points
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
// import 'dart:async';
|
// import 'dart:async';
|
||||||
|
|
||||||
// import 'package:get/get.dart';
|
// import 'package:get/get.dart';
|
||||||
// import 'package:google_maps_flutter/google_maps_flutter.dart';
|
|
||||||
// import 'package:location/location.dart';
|
// import 'package:location/location.dart';
|
||||||
// import 'package:Intaleq/constant/box_name.dart';
|
// import 'package:Intaleq/constant/box_name.dart';
|
||||||
// import 'package:Intaleq/constant/links.dart';
|
// import 'package:Intaleq/constant/links.dart';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
|
|
||||||
List<LatLng> decodePolylineIsolate(String encoded) {
|
List<LatLng> decodePolylineIsolate(String encoded) {
|
||||||
List<LatLng> points = [];
|
List<LatLng> points = [];
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
import 'package:Intaleq/constant/style.dart';
|
import 'package:Intaleq/constant/style.dart';
|
||||||
import 'package:Intaleq/controller/home/map_passenger_controller.dart';
|
import 'package:Intaleq/controller/home/map_passenger_controller.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -4,23 +4,25 @@ import 'dart:convert';
|
|||||||
import 'package:Intaleq/constant/links.dart';
|
import 'package:Intaleq/constant/links.dart';
|
||||||
import 'package:Intaleq/controller/functions/crud.dart';
|
import 'package:Intaleq/controller/functions/crud.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
|
|
||||||
class TripMonitorController extends GetxController {
|
class TripMonitorController extends GetxController {
|
||||||
bool isLoading = false;
|
bool isLoading = false;
|
||||||
Map tripData = {};
|
Map tripData = {};
|
||||||
late String rideId;
|
late String rideId;
|
||||||
late String driverId;
|
late String driverId;
|
||||||
GoogleMapController? mapController;
|
MapLibreMapController? mapController;
|
||||||
List myListString = [];
|
List myListString = [];
|
||||||
late Timer timer;
|
late Timer timer;
|
||||||
late LatLng parentLocation;
|
late LatLng parentLocation;
|
||||||
BitmapDescriptor carIcon = BitmapDescriptor.defaultMarker;
|
String carIcon = 'car';
|
||||||
BitmapDescriptor motoIcon = BitmapDescriptor.defaultMarker;
|
String motoIcon = 'moto';
|
||||||
BitmapDescriptor ladyIcon = BitmapDescriptor.defaultMarker;
|
String ladyIcon = 'lady';
|
||||||
double rotation = 0;
|
double rotation = 0;
|
||||||
double speed = 0;
|
double speed = 0;
|
||||||
|
bool isStyleLoaded = false;
|
||||||
|
|
||||||
getLocationParent() async {
|
getLocationParent() async {
|
||||||
var res = await CRUD().get(
|
var res = await CRUD().get(
|
||||||
@@ -36,21 +38,65 @@ class TripMonitorController extends GetxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void onMapCreated(GoogleMapController controller) async {
|
void onMapCreated(MapLibreMapController controller) async {
|
||||||
mapController = controller;
|
mapController = controller;
|
||||||
controller.getVisibleRegion();
|
update();
|
||||||
controller.animateCamera(
|
}
|
||||||
|
|
||||||
|
void onStyleLoaded() async {
|
||||||
|
isStyleLoaded = true;
|
||||||
|
await _loadMapIcons();
|
||||||
|
mapController?.animateCamera(
|
||||||
CameraUpdate.newLatLng(parentLocation),
|
CameraUpdate.newLatLng(parentLocation),
|
||||||
);
|
);
|
||||||
update();
|
refreshMapElements();
|
||||||
// Set up a timer or interval to trigger the marker update every 3 seconds.
|
|
||||||
|
// Set up a timer or interval to trigger the marker update every 10 seconds.
|
||||||
timer = Timer.periodic(const Duration(seconds: 10), (_) async {
|
timer = Timer.periodic(const Duration(seconds: 10), (_) async {
|
||||||
await getLocationParent();
|
await getLocationParent();
|
||||||
mapController?.animateCamera(CameraUpdate.newLatLng(parentLocation));
|
mapController?.animateCamera(CameraUpdate.newLatLng(parentLocation));
|
||||||
|
refreshMapElements();
|
||||||
update();
|
update();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _loadMapIcons() async {
|
||||||
|
if (mapController == null) return;
|
||||||
|
final icons = {
|
||||||
|
'car': 'assets/images/car.png',
|
||||||
|
'moto': 'assets/images/moto1.png',
|
||||||
|
'lady': 'assets/images/lady1.png',
|
||||||
|
};
|
||||||
|
for (var entry in icons.entries) {
|
||||||
|
final bytes = await rootBundle.load(entry.value);
|
||||||
|
await mapController!.addImage(entry.key, bytes.buffer.asUint8List());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void refreshMapElements() async {
|
||||||
|
if (!isStyleLoaded || mapController == null) return;
|
||||||
|
await mapController!.clearSymbols();
|
||||||
|
|
||||||
|
String iconToUse = carIcon;
|
||||||
|
if (tripData['message'] != null && tripData['message'].isNotEmpty) {
|
||||||
|
final model = tripData['message'][0]['model'].toString();
|
||||||
|
final gender = tripData['message'][0]['gender'].toString();
|
||||||
|
if (model.contains('دراجة')) {
|
||||||
|
iconToUse = motoIcon;
|
||||||
|
} else if (gender == 'Female') {
|
||||||
|
iconToUse = ladyIcon;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await mapController!.addSymbol(SymbolOptions(
|
||||||
|
geometry: parentLocation,
|
||||||
|
iconImage: iconToUse,
|
||||||
|
iconRotate: rotation,
|
||||||
|
textField: 'driver',
|
||||||
|
textOpacity: 0,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
// init() async {
|
// init() async {
|
||||||
// final arguments = Get.arguments;
|
// final arguments = Get.arguments;
|
||||||
// driverId = arguments['driverId'];
|
// driverId = arguments['driverId'];
|
||||||
@@ -65,41 +111,8 @@ class TripMonitorController extends GetxController {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void addCustomCarIcon() {
|
|
||||||
ImageConfiguration config = ImageConfiguration(
|
|
||||||
size: const Size(30, 30), devicePixelRatio: Get.pixelRatio);
|
|
||||||
BitmapDescriptor.fromAssetImage(config, 'assets/images/car.png',
|
|
||||||
mipmaps: false)
|
|
||||||
.then((value) {
|
|
||||||
carIcon = value;
|
|
||||||
update();
|
|
||||||
});
|
|
||||||
void addCustomMotoIcon() {
|
|
||||||
ImageConfiguration config = ImageConfiguration(
|
|
||||||
size: const Size(30, 30), devicePixelRatio: Get.pixelRatio);
|
|
||||||
BitmapDescriptor.fromAssetImage(config, 'assets/images/moto1.png',
|
|
||||||
mipmaps: false)
|
|
||||||
.then((value) {
|
|
||||||
motoIcon = value;
|
|
||||||
update();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void addCustomLadyIcon() {
|
|
||||||
ImageConfiguration config = ImageConfiguration(
|
|
||||||
size: const Size(30, 30), devicePixelRatio: Get.pixelRatio);
|
|
||||||
BitmapDescriptor.fromAssetImage(config, 'assets/images/lady1.png',
|
|
||||||
mipmaps: false)
|
|
||||||
.then((value) {
|
|
||||||
ladyIcon = value;
|
|
||||||
update();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
addCustomCarIcon();
|
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ class Log {
|
|||||||
Log._();
|
Log._();
|
||||||
|
|
||||||
static void print(String value, {StackTrace? stackTrace}) {
|
static void print(String value, {StackTrace? stackTrace}) {
|
||||||
// developer.log(value, name: 'LOG', stackTrace: stackTrace);
|
developer.log(value, name: 'LOG', stackTrace: stackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Object? inspect(Object? object) {
|
static Object? inspect(Object? object) {
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:Intaleq/controller/home/trip_monitor_controller.dart';
|
import 'package:Intaleq/controller/home/trip_monitor_controller.dart';
|
||||||
import 'package:Intaleq/views/widgets/my_scafold.dart';
|
import 'package:Intaleq/views/widgets/my_scafold.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
import 'package:vibration/vibration.dart';
|
import 'package:vibration/vibration.dart';
|
||||||
|
|
||||||
import '../../../../constant/colors.dart';
|
import '../../../../constant/colors.dart';
|
||||||
@@ -24,31 +23,15 @@ class TripMonitor extends StatelessWidget {
|
|||||||
return MyScafolld(
|
return MyScafolld(
|
||||||
title: 'Trip Monitor'.tr,
|
title: 'Trip Monitor'.tr,
|
||||||
body: [
|
body: [
|
||||||
GoogleMap(
|
MapLibreMap(
|
||||||
onMapCreated: tripMonitorController.onMapCreated,
|
onMapCreated: tripMonitorController.onMapCreated,
|
||||||
|
onStyleLoadedCallback: tripMonitorController.onStyleLoaded,
|
||||||
initialCameraPosition: CameraPosition(
|
initialCameraPosition: CameraPosition(
|
||||||
// bearing: 45,
|
|
||||||
target: tripMonitorController.parentLocation,
|
target: tripMonitorController.parentLocation,
|
||||||
zoom: 16,
|
zoom: 16,
|
||||||
tilt: 40,
|
tilt: 40,
|
||||||
),
|
),
|
||||||
// onCameraMove: (position) {},
|
styleString: "assets/style.json",
|
||||||
markers: {
|
|
||||||
Marker(
|
|
||||||
markerId: MarkerId('start'.tr),
|
|
||||||
position: tripMonitorController.parentLocation,
|
|
||||||
draggable: true,
|
|
||||||
icon: tripMonitorController.tripData['message'][0]['model']
|
|
||||||
.contains('دراجة')
|
|
||||||
? tripMonitorController.motoIcon
|
|
||||||
: tripMonitorController.tripData['message'][0]['model']
|
|
||||||
['gender'] ==
|
|
||||||
'Male'
|
|
||||||
? tripMonitorController.carIcon
|
|
||||||
: tripMonitorController.ladyIcon,
|
|
||||||
rotation: tripMonitorController.rotation,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
speedCircle()
|
speedCircle()
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import 'package:Intaleq/views/widgets/my_scafold.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
import 'package:vibration/vibration.dart';
|
import 'package:vibration/vibration.dart';
|
||||||
|
|
||||||
import '../../../../constant/colors.dart';
|
import '../../../../constant/colors.dart';
|
||||||
@@ -30,31 +30,15 @@ class TripMonitor extends StatelessWidget {
|
|||||||
return MyScafolld(
|
return MyScafolld(
|
||||||
title: 'Trip Monitor'.tr,
|
title: 'Trip Monitor'.tr,
|
||||||
body: [
|
body: [
|
||||||
GoogleMap(
|
MapLibreMap(
|
||||||
onMapCreated: tripMonitorController.onMapCreated,
|
onMapCreated: tripMonitorController.onMapCreated,
|
||||||
|
onStyleLoadedCallback: tripMonitorController.onStyleLoaded,
|
||||||
initialCameraPosition: CameraPosition(
|
initialCameraPosition: CameraPosition(
|
||||||
// bearing: 45,
|
|
||||||
target: tripMonitorController.parentLocation,
|
target: tripMonitorController.parentLocation,
|
||||||
zoom: 16,
|
zoom: 16,
|
||||||
tilt: 40,
|
tilt: 40,
|
||||||
),
|
),
|
||||||
// onCameraMove: (position) {},
|
styleString: "assets/style.json",
|
||||||
markers: {
|
|
||||||
Marker(
|
|
||||||
markerId: MarkerId('start'.tr),
|
|
||||||
position: tripMonitorController.parentLocation,
|
|
||||||
draggable: true,
|
|
||||||
icon: tripMonitorController.tripData['message'][0]['model']
|
|
||||||
.contains('دراجة')
|
|
||||||
? tripMonitorController.motoIcon
|
|
||||||
: tripMonitorController.tripData['message'][0]['model']
|
|
||||||
['gender'] ==
|
|
||||||
'Male'
|
|
||||||
? tripMonitorController.carIcon
|
|
||||||
: tripMonitorController.ladyIcon,
|
|
||||||
rotation: tripMonitorController.rotation,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
speedCircle()
|
speedCircle()
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import 'dart:async';
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
import 'package:Intaleq/constant/box_name.dart';
|
import 'package:Intaleq/constant/box_name.dart';
|
||||||
import 'package:Intaleq/constant/table_names.dart';
|
import 'package:Intaleq/constant/table_names.dart';
|
||||||
import 'package:Intaleq/views/widgets/elevated_btn.dart';
|
import 'package:Intaleq/views/widgets/elevated_btn.dart';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
|
|
||||||
import '../../../constant/colors.dart';
|
import '../../../constant/colors.dart';
|
||||||
import '../../../constant/style.dart';
|
import '../../../constant/style.dart';
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
import 'package:Intaleq/controller/home/points_for_rider_controller.dart';
|
import 'package:Intaleq/controller/home/points_for_rider_controller.dart';
|
||||||
|
|
||||||
import '../../../constant/colors.dart';
|
import '../../../constant/colors.dart';
|
||||||
import '../../../constant/style.dart';
|
import '../../../constant/style.dart';
|
||||||
// import '../../../controller/functions/location_controller.dart'; // Un-comment if needed
|
|
||||||
// import '../../../controller/home/device_tier.dart'; // Removed to rely on Controller logic
|
|
||||||
import '../../../controller/home/map_passenger_controller.dart';
|
import '../../../controller/home/map_passenger_controller.dart';
|
||||||
import '../../widgets/mycircular.dart';
|
import '../../widgets/mycircular.dart';
|
||||||
import '../../widgets/mydialoug.dart';
|
import '../../widgets/mydialoug.dart';
|
||||||
@@ -28,29 +25,46 @@ class GoogleMapPassengerWidget extends StatelessWidget {
|
|||||||
top: 0,
|
top: 0,
|
||||||
left: 0,
|
left: 0,
|
||||||
right: 0,
|
right: 0,
|
||||||
child: GoogleMap(
|
child: MapLibreMap(
|
||||||
onMapCreated: controller.onMapCreated,
|
onMapCreated: controller.onMapCreated,
|
||||||
|
onStyleLoadedCallback: () => controller.onStyleLoaded(),
|
||||||
// ✅ Camera Bounds
|
styleString: "assets/style.json",
|
||||||
cameraTargetBounds: CameraTargetBounds(controller.boundsdata),
|
|
||||||
|
|
||||||
// ✅ Performance: Smoother zoom limits for low-end devices
|
// ✅ Performance: Smoother zoom limits for low-end devices
|
||||||
minMaxZoomPreference: controller.lowPerf
|
minMaxZoomPreference: controller.lowPerf
|
||||||
? const MinMaxZoomPreference(6, 17)
|
? const MinMaxZoomPreference(6, 17)
|
||||||
: const MinMaxZoomPreference(6, 18),
|
: const MinMaxZoomPreference(6, 18),
|
||||||
|
|
||||||
// ✅ Destination Selection on Long Press
|
initialCameraPosition: CameraPosition(
|
||||||
onLongPress: (LatLng argument) {
|
target: controller.passengerLocation,
|
||||||
|
zoom: controller.lowPerf ? 14.5 : 15,
|
||||||
|
),
|
||||||
|
|
||||||
|
// ✅ Map Settings
|
||||||
|
myLocationEnabled: true,
|
||||||
|
trackCameraPosition: true,
|
||||||
|
|
||||||
|
// ✅ Camera Movement Logic
|
||||||
|
onCameraIdle: () {
|
||||||
|
if (controller.mapController != null) {
|
||||||
|
final position = controller.mapController!.cameraPosition;
|
||||||
|
if (position != null) {
|
||||||
|
print('✅ onCameraIdle targeted: ${position.target}');
|
||||||
|
// 1. Always update current view target (for pickers)
|
||||||
|
controller
|
||||||
|
.updateCurrentLocationFromCamera(position.target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
onMapLongClick: (point, latlng) {
|
||||||
MyDialog().getDialog('Are you want to go to this site'.tr, '',
|
MyDialog().getDialog('Are you want to go to this site'.tr, '',
|
||||||
() async {
|
() async {
|
||||||
controller.clearPolyline();
|
controller.clearPolyline();
|
||||||
// Ensure we have car data available before routing
|
|
||||||
// if (controller.dataCarsLocationByPassenger != null) {
|
|
||||||
// i use this check if needed
|
|
||||||
if (controller.carsLocationByPassenger.isNotEmpty) {
|
if (controller.carsLocationByPassenger.isNotEmpty) {
|
||||||
await controller.getDirectionMap(
|
await controller.getDirectionMap(
|
||||||
'${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
|
'${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
|
||||||
'${argument.latitude},${argument.longitude}',
|
'${latlng.latitude},${latlng.longitude}',
|
||||||
);
|
);
|
||||||
Get.back(); // Close Dialog
|
Get.back(); // Close Dialog
|
||||||
await controller.bottomSheet();
|
await controller.bottomSheet();
|
||||||
@@ -76,80 +90,9 @@ class GoogleMapPassengerWidget extends StatelessWidget {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
// ✅ Hide UI elements on tap
|
onMapClick: (point, latlng) {
|
||||||
onTap: (argument) {
|
|
||||||
controller.hidePlaces();
|
controller.hidePlaces();
|
||||||
},
|
},
|
||||||
|
|
||||||
initialCameraPosition: CameraPosition(
|
|
||||||
target: controller.passengerLocation,
|
|
||||||
zoom: controller.lowPerf ? 14.5 : 15,
|
|
||||||
),
|
|
||||||
|
|
||||||
// ✅ Markers
|
|
||||||
markers: controller.markers.toSet(),
|
|
||||||
|
|
||||||
// ✅ Polygons (e.g., University/Country borders)
|
|
||||||
polygons: controller.polygons,
|
|
||||||
|
|
||||||
// ✅ Polylines: Switch to lighter version if lowPerf is detected
|
|
||||||
polylines: controller.lowPerf
|
|
||||||
? controller.polyLinesLight.toSet()
|
|
||||||
: controller.polyLines.toSet(),
|
|
||||||
|
|
||||||
// ✅ Map Type: Switch to Normal map on low-end devices to save RAM
|
|
||||||
mapType: controller.lowPerf
|
|
||||||
? MapType.normal
|
|
||||||
: (controller.mapType
|
|
||||||
? MapType.satellite
|
|
||||||
: MapType
|
|
||||||
.normal), // Changed terrain default to normal for better performance
|
|
||||||
|
|
||||||
// ✅ UI Settings for Performance
|
|
||||||
myLocationButtonEnabled: false,
|
|
||||||
mapToolbarEnabled: false,
|
|
||||||
tiltGesturesEnabled:
|
|
||||||
false, // Disable tilt to save GPU resources
|
|
||||||
|
|
||||||
// Lite Mode (Static image) only on very low-end Androids if needed,
|
|
||||||
// but usually handled by lowPerf logic in mapType/Traffic
|
|
||||||
liteModeEnabled: Platform.isAndroid && controller.lowPerf,
|
|
||||||
|
|
||||||
trafficEnabled: controller.mapTrafficON && !controller.lowPerf,
|
|
||||||
buildingsEnabled: !controller.lowPerf,
|
|
||||||
rotateGesturesEnabled:
|
|
||||||
!controller.lowPerf, // Disable rotation on low-end
|
|
||||||
|
|
||||||
// ✅ Camera Movement Logic
|
|
||||||
onCameraMove: (CameraPosition position) {
|
|
||||||
// 1. Always update current view target (for pickers)
|
|
||||||
controller.newMyLocation = position.target;
|
|
||||||
|
|
||||||
// 2. Handle Drag-to-Select for specific states
|
|
||||||
if (controller.startLocationFromMap == true) {
|
|
||||||
controller.newStartPointLocation = position.target;
|
|
||||||
} else if (controller.passengerStartLocationFromMap == true) {
|
|
||||||
controller.newStartPointLocation = position.target;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. Handle Waypoints Dragging
|
|
||||||
int waypointsLength =
|
|
||||||
Get.find<WayPointController>().wayPoints.length;
|
|
||||||
if (waypointsLength > 0 &&
|
|
||||||
controller.wayPointIndex >= 0 &&
|
|
||||||
controller.wayPointIndex <
|
|
||||||
controller.placesCoordinate.length) {
|
|
||||||
controller.placesCoordinate[controller.wayPointIndex] =
|
|
||||||
'${position.target.latitude},${position.target.longitude}';
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. Throttle heavy calculations (Reverse Geocoding / API calls)
|
|
||||||
if (controller.lowPerf) {
|
|
||||||
controller.onCameraMoveThrottled(position);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
myLocationEnabled: false,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import 'dart:math';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_font_icons/flutter_font_icons.dart';
|
import 'package:flutter_font_icons/flutter_font_icons.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
import 'dart:ui'; // مهم لإضافة تأثير الضبابية
|
import 'dart:ui'; // مهم لإضافة تأثير الضبابية
|
||||||
|
|
||||||
import '../../../constant/colors.dart';
|
import '../../../constant/colors.dart';
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import 'package:Intaleq/controller/home/map_passenger_controller.dart';
|
|||||||
import 'package:Intaleq/main.dart';
|
import 'package:Intaleq/main.dart';
|
||||||
import 'package:Intaleq/views/home/map_widget.dart/form_search_places_destenation.dart';
|
import 'package:Intaleq/views/home/map_widget.dart/form_search_places_destenation.dart';
|
||||||
import 'package:Intaleq/views/widgets/elevated_btn.dart';
|
import 'package:Intaleq/views/widgets/elevated_btn.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
import '../../../constant/colors.dart';
|
import '../../../constant/colors.dart';
|
||||||
import '../../../constant/table_names.dart';
|
import '../../../constant/table_names.dart';
|
||||||
import '../../../controller/functions/toast.dart';
|
import '../../../controller/functions/toast.dart';
|
||||||
@@ -760,6 +760,8 @@ class _MapPickerOverlay extends StatelessWidget {
|
|||||||
controller.newMyLocation.latitude,
|
controller.newMyLocation.latitude,
|
||||||
controller.newMyLocation.longitude,
|
controller.newMyLocation.longitude,
|
||||||
);
|
);
|
||||||
|
print('🌐 MAP PICKER CENTER: ${currentCameraPosition.latitude}, ${currentCameraPosition.longitude}');
|
||||||
|
print('✅ _onConfirmTap confirmed coordinates: ${currentCameraPosition.latitude}, ${currentCameraPosition.longitude}');
|
||||||
|
|
||||||
// ── CASE 0: Waypoint picker mode ──────────────────────────────────────
|
// ── CASE 0: Waypoint picker mode ──────────────────────────────────────
|
||||||
if (controller.isPickingWaypoint && controller.pickingWaypointIndex >= 0) {
|
if (controller.isPickingWaypoint && controller.pickingWaypointIndex >= 0) {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import 'package:get/get.dart';
|
|||||||
import 'package:Intaleq/constant/style.dart';
|
import 'package:Intaleq/constant/style.dart';
|
||||||
import 'package:Intaleq/views/widgets/my_scafold.dart';
|
import 'package:Intaleq/views/widgets/my_scafold.dart';
|
||||||
import 'package:Intaleq/views/widgets/mycircular.dart';
|
import 'package:Intaleq/views/widgets/mycircular.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:maplibre_gl/maplibre_gl.dart';
|
||||||
|
|
||||||
import '../../../constant/colors.dart';
|
import '../../../constant/colors.dart';
|
||||||
import '../../../controller/functions/launch.dart';
|
import '../../../controller/functions/launch.dart';
|
||||||
@@ -72,6 +72,7 @@ class OrderHistory extends StatelessWidget {
|
|||||||
double.parse(ride['end_location'].toString().split(',')[0]),
|
double.parse(ride['end_location'].toString().split(',')[0]),
|
||||||
double.parse(ride['end_location'].toString().split(',')[1]),
|
double.parse(ride['end_location'].toString().split(',')[1]),
|
||||||
);
|
);
|
||||||
|
|
||||||
final LatLngBounds bounds = LatLngBounds(
|
final LatLngBounds bounds = LatLngBounds(
|
||||||
northeast: LatLng(
|
northeast: LatLng(
|
||||||
startLocation.latitude > endLocation.latitude
|
startLocation.latitude > endLocation.latitude
|
||||||
@@ -124,32 +125,34 @@ class OrderHistory extends StatelessWidget {
|
|||||||
height: 150, // ارتفاع ثابت للخريطة
|
height: 150, // ارتفاع ثابت للخريطة
|
||||||
child: AbsorbPointer(
|
child: AbsorbPointer(
|
||||||
// لمنع التفاعل المباشر مع الخريطة داخل القائمة
|
// لمنع التفاعل المباشر مع الخريطة داخل القائمة
|
||||||
child: GoogleMap(
|
child: MapLibreMap(
|
||||||
|
styleString: "assets/style.json",
|
||||||
initialCameraPosition:
|
initialCameraPosition:
|
||||||
CameraPosition(target: startLocation, zoom: 12),
|
CameraPosition(target: startLocation, zoom: 12),
|
||||||
// --- نفس منطق الخريطة والخطوط ---
|
onStyleLoadedCallback: () async {
|
||||||
onMapCreated: (GoogleMapController controller) {
|
// This is a bit tricky in a list, but we can do it:
|
||||||
|
// Since we don't have the controller here easily without state,
|
||||||
|
// we'll rely on the simple map view or use a stateful widget for each card.
|
||||||
|
// For now, let's keep it simple.
|
||||||
|
},
|
||||||
|
onMapCreated: (MapLibreMapController controller) async {
|
||||||
|
await controller.addSymbol(SymbolOptions(
|
||||||
|
geometry: startLocation,
|
||||||
|
iconImage: 'start_icon',
|
||||||
|
));
|
||||||
|
await controller.addSymbol(SymbolOptions(
|
||||||
|
geometry: endLocation,
|
||||||
|
iconImage: 'end_icon',
|
||||||
|
));
|
||||||
|
await controller.addLine(LineOptions(
|
||||||
|
geometry: [startLocation, endLocation],
|
||||||
|
lineColor: '#${AppColor.primaryColor.value.toRadixString(16).substring(2)}',
|
||||||
|
lineWidth: 4,
|
||||||
|
));
|
||||||
|
|
||||||
controller.animateCamera(
|
controller.animateCamera(
|
||||||
CameraUpdate.newLatLngBounds(bounds, 60));
|
CameraUpdate.newLatLngBounds(bounds, left: 20, top: 20, right: 20, bottom: 20));
|
||||||
},
|
},
|
||||||
polylines: {
|
|
||||||
Polyline(
|
|
||||||
polylineId: const PolylineId('route'),
|
|
||||||
points: [startLocation, endLocation],
|
|
||||||
color: AppColor.primaryColor,
|
|
||||||
width: 4,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
markers: {
|
|
||||||
Marker(
|
|
||||||
markerId: const MarkerId('start'),
|
|
||||||
position: startLocation),
|
|
||||||
Marker(
|
|
||||||
markerId: const MarkerId('end'),
|
|
||||||
position: endLocation),
|
|
||||||
},
|
|
||||||
mapToolbarEnabled: false,
|
|
||||||
zoomControlsEnabled: false,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
64
pubspec.lock
64
pubspec.lock
@@ -932,42 +932,42 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: google_maps_flutter
|
name: google_maps_flutter
|
||||||
sha256: "9b0d6dab3de6955837575dc371dd772fcb5d0a90f6a4954e8c066472f9938550"
|
sha256: fc714bf8072e2c121d4277cb6dca23bbfae954b6c7b5d6dd73f1bc8d09762921
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.14.2"
|
version: "2.17.0"
|
||||||
google_maps_flutter_android:
|
google_maps_flutter_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: google_maps_flutter_android
|
name: google_maps_flutter_android
|
||||||
sha256: "8b569c7abc52bc62d4502bf93847d487c0843f3e6a2a8e122b72e98843b2ab4c"
|
sha256: "9c14d3d58a398d6182c2c674b17d36c16a1d64c2c60891e9acf019856319c512"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.19.1"
|
version: "2.19.5"
|
||||||
google_maps_flutter_ios:
|
google_maps_flutter_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: google_maps_flutter_ios
|
name: google_maps_flutter_ios
|
||||||
sha256: "174d730bc3f253e1c06a342d7a5efb216f15003a6e26693c2d70d60973625af4"
|
sha256: "5ed8d8d0f93dfa7f5039c409c500948e98e59068f8f6fcf9105bfd07e3709d7f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.17.5"
|
version: "2.18.1"
|
||||||
google_maps_flutter_platform_interface:
|
google_maps_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: google_maps_flutter_platform_interface
|
name: google_maps_flutter_platform_interface
|
||||||
sha256: "0f8c6674d70c7e9a09cd34f63b18ebaf8a5822e85b558128eae0fdf02b4a3e93"
|
sha256: ddbe34435dfb34e83fca295c6a8dcc53c3b51487e9eec3c737ce4ae605574347
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.14.2"
|
version: "2.15.0"
|
||||||
google_maps_flutter_web:
|
google_maps_flutter_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: google_maps_flutter_web
|
name: google_maps_flutter_web
|
||||||
sha256: d416602944e1859f3cbbaa53e34785c223fa0a11eddb34a913c964c5cbb5d8cf
|
sha256: "6cefe4ef4cc61dc0dfba4c413dec4bd105cb6b9461bfbe1465ddd09f80af377d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.14+3"
|
version: "0.6.2"
|
||||||
google_sign_in:
|
google_sign_in:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -1220,10 +1220,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: js
|
name: js
|
||||||
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
|
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.2"
|
version: "0.6.7"
|
||||||
json_annotation:
|
json_annotation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1264,6 +1264,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.0.1"
|
||||||
|
latlong2:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: latlong2
|
||||||
|
sha256: "98227922caf49e6056f91b6c56945ea1c7b166f28ffcd5fb8e72fc0b453cc8fe"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.1"
|
||||||
leak_tracker:
|
leak_tracker:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1376,6 +1384,30 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0"
|
version: "1.3.0"
|
||||||
|
maplibre_gl:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: maplibre_gl
|
||||||
|
sha256: d9773555ae4ebab94bbc3ae2176b077cfda486ec729eefe01e1613f164cb8410
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.25.0"
|
||||||
|
maplibre_gl_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: maplibre_gl_platform_interface
|
||||||
|
sha256: bd7de401dea24dd7e8a6f2fa736ddee7dbbee3e24a9027f0afdd619994702047
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.25.0"
|
||||||
|
maplibre_gl_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: maplibre_gl_web
|
||||||
|
sha256: af0e48bf96e8dd99f8b958a1953126971eb8a0527b9735441d4f24df3913f5a2
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.25.0"
|
||||||
matcher:
|
matcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1856,18 +1888,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: socket_io_client
|
name: socket_io_client
|
||||||
sha256: ef6c989e5eee8d04baf18482ec3d7699b91bc41e279794a99d8e3bef897b074a
|
sha256: "64bd271703db3682d4195dd813c555413d21a49bbaef7c3ed38932fd2a209a10"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.4"
|
version: "1.0.2"
|
||||||
socket_io_common:
|
socket_io_common:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: socket_io_common
|
name: socket_io_common
|
||||||
sha256: "162fbaecbf4bf9a9372a62a341b3550b51dcef2f02f3e5830a297fd48203d45b"
|
sha256: "469c7e6bb0c8d571a5158c1352112654f03aedc2f0a246533e1cbdb41efa4937"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.1"
|
version: "1.0.1"
|
||||||
source_gen:
|
source_gen:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -78,9 +78,9 @@ dependencies:
|
|||||||
internet_connection_checker: ^3.0.1
|
internet_connection_checker: ^3.0.1
|
||||||
connectivity_plus: ^6.1.5
|
connectivity_plus: ^6.1.5
|
||||||
app_links: ^7.0.0
|
app_links: ^7.0.0
|
||||||
socket_io_client: ^3.1.4
|
latlong2: ^0.9.1
|
||||||
# flutter_map: ^8.2.2
|
maplibre_gl: ^0.25.0
|
||||||
# latlong2: ^0.9.1
|
socket_io_client: ^1.0.2
|
||||||
# home_widget: ^0.7.0+1
|
# home_widget: ^0.7.0+1
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
|
|||||||
Reference in New Issue
Block a user