From 6294d6e725a5a24773d4ae1034a75ec2d24eeb96 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Fri, 10 Jul 2026 22:31:27 +0300 Subject: [PATCH] Update: 2026-07-10 22:31:26 --- .../lib/controller/auth/login_controller.dart | 12 +++++++++++- .../controller/functions/country_logic.dart | 6 ++---- .../lib/controller/functions/geolocation.dart | 19 +++++++++++++++++++ siro_rider/lib/main.dart | 7 +++++-- siro_rider/lib/views/auth/login_page.dart | 2 +- 5 files changed, 38 insertions(+), 8 deletions(-) diff --git a/siro_rider/lib/controller/auth/login_controller.dart b/siro_rider/lib/controller/auth/login_controller.dart index 93020bbb..0e1fd888 100644 --- a/siro_rider/lib/controller/auth/login_controller.dart +++ b/siro_rider/lib/controller/auth/login_controller.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:io'; +import 'package:siro_rider/services/geofencing_service.dart'; import 'package:geolocator/geolocator.dart'; import 'package:siro_rider/constant/api_key.dart'; @@ -566,11 +567,20 @@ class LoginController extends GetxController { // Check if the app has permission to access location permissionGranted = await location.hasPermission(); if (permissionGranted == loc.PermissionStatus.denied) { + + permissionGranted = await location.requestPermission(); if (permissionGranted != loc.PermissionStatus.granted) { // Location permission is still not granted, handle the error permissionGranted = await location.requestPermission(); - return; + if (permissionGranted != loc.PermissionStatus.granted) { + return; + } + } + + // Initialize geofencing now that we have permission + if (Platform.isAndroid || Platform.isIOS) { + await SiroGeofencingService.initAndStart(); } } if (permissionGranted.toString() == 'PermissionStatus.granted' || diff --git a/siro_rider/lib/controller/functions/country_logic.dart b/siro_rider/lib/controller/functions/country_logic.dart index 3045b785..3dea419b 100644 --- a/siro_rider/lib/controller/functions/country_logic.dart +++ b/siro_rider/lib/controller/functions/country_logic.dart @@ -159,11 +159,9 @@ class CountryLogic { if (!serviceEnabled) return null; LocationPermission permission = await Geolocator.checkPermission(); - if (permission == LocationPermission.denied) { - permission = await Geolocator.requestPermission(); - if (permission == LocationPermission.denied) return null; + if (permission == LocationPermission.denied || permission == LocationPermission.deniedForever) { + return null; } - if (permission == LocationPermission.deniedForever) return null; final pos = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.low, diff --git a/siro_rider/lib/controller/functions/geolocation.dart b/siro_rider/lib/controller/functions/geolocation.dart index 46426e7c..3a59cef1 100644 --- a/siro_rider/lib/controller/functions/geolocation.dart +++ b/siro_rider/lib/controller/functions/geolocation.dart @@ -1,5 +1,7 @@ import 'package:geolocator/geolocator.dart'; import 'package:siro_rider/services/geofencing_service.dart'; +import 'package:get/get.dart'; +import 'package:flutter/material.dart'; class GeoLocation { Future getCurrentLocation() async { @@ -15,6 +17,23 @@ class GeoLocation { permission = await Geolocator.checkPermission(); if (permission == LocationPermission.denied) { + // Prominent Disclosure for Background Location + bool? userAgreed = await Get.defaultDialog( + title: 'صلاحية الموقع'.tr, + middleText: 'يجمع تطبيق سيرو بيانات الموقع لتفعيل ميزة التتبع الجغرافي (Geofence) ولتمكين السائق من الوصول إليك بدقة وتتبع رحلتك حتى عندما يكون التطبيق في الخلفية أو مغلقاً.'.tr, + titleStyle: const TextStyle(fontWeight: FontWeight.bold), + textConfirm: 'موافق'.tr, + textCancel: 'إلغاء'.tr, + confirmTextColor: Colors.white, + onConfirm: () => Get.back(result: true), + onCancel: () => Get.back(result: false), + barrierDismissible: false, + ); + + if (userAgreed != true) { + return Future.error('Location permissions are denied'); + } + permission = await Geolocator.requestPermission(); if (permission == LocationPermission.denied) { // Permissions are denied, we cannot fetch the location. diff --git a/siro_rider/lib/main.dart b/siro_rider/lib/main.dart index f72a2d46..0fcd532c 100644 --- a/siro_rider/lib/main.dart +++ b/siro_rider/lib/main.dart @@ -96,9 +96,12 @@ void main() { // ✅ تهيئة خدمة Android Live Update (Progress Style) await AndroidLiveUpdateService.init(); - // Initialize Geofencing Service + // Initialize Geofencing Service only if permission is already granted to avoid auto-prompt if (Platform.isAndroid || Platform.isIOS) { - await SiroGeofencingService.initAndStart(); + LocationPermission permission = await Geolocator.checkPermission(); + if (permission != LocationPermission.denied && permission != LocationPermission.deniedForever) { + await SiroGeofencingService.initAndStart(); + } } // Lock screen orientation. diff --git a/siro_rider/lib/views/auth/login_page.dart b/siro_rider/lib/views/auth/login_page.dart index fde7c862..4e1ad7ef 100644 --- a/siro_rider/lib/views/auth/login_page.dart +++ b/siro_rider/lib/views/auth/login_page.dart @@ -506,7 +506,7 @@ class LoginPage extends StatelessWidget { ), const SizedBox(height: 14), Text( - 'We need your location to find nearby drivers for pickups and drop-offs.' + 'يجمع تطبيق سيرو بيانات الموقع لتفعيل ميزة التتبع الجغرافي (Geofence) ولتمكين السائق من الوصول إليك بدقة وتتبع رحلتك حتى عندما يكون التطبيق في الخلفية أو مغلقاً.' .tr, textAlign: TextAlign.center, style: AppStyle.title.copyWith(