Initial push to my private server
This commit is contained in:
@@ -6,6 +6,7 @@ import 'dart:math' as math;
|
||||
import 'dart:ui';
|
||||
import 'dart:convert';
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
import 'package:Intaleq/constant/univeries_polygon.dart';
|
||||
@@ -13,6 +14,7 @@ import 'package:Intaleq/controller/firebase/local_notification.dart';
|
||||
import 'package:Intaleq/controller/functions/encrypt_decrypt.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter_confetti/flutter_confetti.dart';
|
||||
import 'package:uni_links/uni_links.dart';
|
||||
import 'package:vector_math/vector_math.dart' show radians, degrees;
|
||||
|
||||
import 'package:Intaleq/controller/functions/tts.dart';
|
||||
@@ -56,6 +58,10 @@ import 'device_tier.dart';
|
||||
import 'vip_waitting_page.dart';
|
||||
|
||||
class MapPassengerController extends GetxController {
|
||||
// --- START: DEEP LINKING ADDITIONS ---
|
||||
StreamSubscription? _linkSubscription;
|
||||
// --- END: DEEP LINKING ADDITIONS ---
|
||||
|
||||
bool isLoading = true;
|
||||
TextEditingController placeDestinationController = TextEditingController();
|
||||
TextEditingController increasFeeFromPassenger = TextEditingController();
|
||||
@@ -280,6 +286,92 @@ class MapPassengerController extends GetxController {
|
||||
update();
|
||||
}
|
||||
|
||||
/// Initializes the deep link listener.
|
||||
/// It checks for the initial link when the app starts and then listens for subsequent links.
|
||||
Future<void> _initUniLinks() async {
|
||||
try {
|
||||
// Get the initial link that opened the app
|
||||
final initialLink = await getInitialUri();
|
||||
if (initialLink != null) {
|
||||
handleDeepLink(initialLink);
|
||||
}
|
||||
} on PlatformException {
|
||||
print('Failed to get initial deep link.');
|
||||
} on FormatException {
|
||||
print('Invalid initial deep link format.');
|
||||
}
|
||||
|
||||
// Listen for incoming links while the app is running
|
||||
_linkSubscription = uriLinkStream.listen((Uri? link) {
|
||||
handleDeepLink(link);
|
||||
}, onError: (err) {
|
||||
print('Error listening to deep links: $err');
|
||||
});
|
||||
}
|
||||
|
||||
/// Parses the incoming deep link and triggers the route initiation.
|
||||
void handleDeepLink(Uri? link) {
|
||||
if (link == null) return;
|
||||
|
||||
// Check if the link matches your app's scheme and path
|
||||
// e.g., intaleq://map?lat=31.9539&lng=35.9106
|
||||
if (link.scheme == 'intaleq' && link.host == 'map') {
|
||||
final latString = link.queryParameters['lat'];
|
||||
final lngString = link.queryParameters['lng'];
|
||||
|
||||
if (latString != null && lngString != null) {
|
||||
final double? lat = double.tryParse(latString);
|
||||
final double? lng = double.tryParse(lngString);
|
||||
|
||||
if (lat != null && lng != null) {
|
||||
final destination = LatLng(lat, lng);
|
||||
print('Deep link received. Destination: $destination');
|
||||
initiateRouteFromDeepLink(destination);
|
||||
} else {
|
||||
print('Failed to parse lat/lng from deep link.');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Sets the destination from the deep link and updates the UI to show the map.
|
||||
void initiateRouteFromDeepLink(LatLng destination) async {
|
||||
// Wait for map controller to be ready
|
||||
if (mapController == null) {
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
if (mapController == null) {
|
||||
print("Map controller is not available to handle deep link.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
myDestination = destination;
|
||||
|
||||
// Animate camera to user's current location to show the starting point
|
||||
await mapController?.animateCamera(CameraUpdate.newLatLng(
|
||||
LatLng(passengerLocation.latitude, passengerLocation.longitude)));
|
||||
|
||||
// Ensure the main menu is visible to start the booking process
|
||||
if (isMainBottomMenuMap) {
|
||||
changeMainBottomMenuMap();
|
||||
}
|
||||
|
||||
passengerStartLocationFromMap = true;
|
||||
isPickerShown = true;
|
||||
hintTextDestinationPoint = "Destination from external link".tr;
|
||||
update();
|
||||
|
||||
// The user can now see the destination and proceed to get the route and price.
|
||||
Get.snackbar(
|
||||
"Location Received".tr,
|
||||
"The destination has been set from the link.".tr,
|
||||
backgroundColor: AppColor.greenColor,
|
||||
colorText: Colors.white,
|
||||
);
|
||||
}
|
||||
|
||||
// --- END: DEEP LINKING METHODS ---
|
||||
|
||||
void getCurrentLocationFormString() async {
|
||||
currentLocationToFormPlaces = true;
|
||||
currentLocationString = 'Waiting for your location'.tr;
|
||||
@@ -3190,6 +3282,8 @@ class MapPassengerController extends GetxController {
|
||||
print(
|
||||
"--- MapPassengerController: Closing and cleaning up all resources. ---");
|
||||
|
||||
_linkSubscription?.cancel();
|
||||
|
||||
// 1. إلغاء المؤقتات الفردية
|
||||
// Using ?.cancel() is safe even if the timer is null
|
||||
markerReloadingTimer.cancel();
|
||||
@@ -5719,6 +5813,7 @@ class MapPassengerController extends GetxController {
|
||||
await initilizeGetStorage(); // إعداد سريع
|
||||
await _initMinimalIcons(); // start/end فقط
|
||||
await addToken(); // لو لازم للمصادقة
|
||||
await _initUniLinks();
|
||||
await getLocation(); // لتحديد الكاميرا
|
||||
box.write(BoxName.carType, 'yet');
|
||||
box.write(BoxName.tipPercentage, '0');
|
||||
|
||||
Reference in New Issue
Block a user