Files
intaleq/lib/controller/home/deep_link_controller.dart
Hamza-Ayed 7595be8067 25-09-22/1
2025-09-22 17:28:19 +03:00

64 lines
2.2 KiB
Dart

import 'dart:async';
import 'package:app_links/app_links.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class DeepLinkController extends GetxController {
// استخدم AppLinks للتعامل مع الروابط
final _appLinks = AppLinks();
StreamSubscription<Uri>? _linkSubscription;
// متغير لتخزين الإحداثيات القادمة من الرابط
final Rx<LatLng?> deepLinkLatLng = Rx<LatLng?>(null);
@override
void onInit() {
super.onInit();
// ابدأ بالاستماع للروابط عند تشغيل التطبيق
initDeepLinks();
}
Future<void> initDeepLinks() async {
// الاستماع إلى الروابط القادمة
_linkSubscription = _appLinks.uriLinkStream.listen((uri) {
print('Received deep link: $uri');
_handleLink(uri);
});
// جلب الرابط الأولي الذي قد يكون فتح التطبيق
final initialUri = await _appLinks.getInitialLink();
if (initialUri != null) {
print('Received initial deep link: $initialUri');
_handleLink(initialUri);
}
}
void _handleLink(Uri uri) {
// تحقق من أن الرابط يتبع النمط المتوقع (مثال: intaleq://route?lat=xx&lng=yy)
if (uri.scheme == 'intaleq' && uri.host == 'route') {
// استخراج خطوط الطول والعرض من الرابط
final latString = uri.queryParameters['lat'];
final lngString = uri.queryParameters['lng'];
if (latString != null && lngString != null) {
final double? lat = double.tryParse(latString);
final double? lng = double.tryParse(lngString);
if (lat != null && lng != null) {
// إذا كانت الإحداثيات صالحة، قم بتحديث المتغير
// ستستمع وحدة التحكم في الخريطة لهذا التغيير
deepLinkLatLng.value = LatLng(lat, lng);
print('Parsed LatLng from deep link: ${deepLinkLatLng.value}');
}
}
}
}
@override
void onClose() {
// تأكد من إلغاء الاشتراك عند إغلاق وحدة التحكم
_linkSubscription?.cancel();
super.onClose();
}
}