import 'package:geolocator/geolocator.dart'; import 'package:permission_handler/permission_handler.dart'; class LocationService { static final LocationService _instance = LocationService._internal(); factory LocationService() => _instance; LocationService._internal(); Future requestLocationPermission() async { final status = await Permission.location.request(); return status.isGranted; } Future checkLocationPermission() async { final status = await Permission.location.status; return status.isGranted; } Future getCurrentLocation() async { try { final hasPermission = await checkLocationPermission(); if (!hasPermission) { final granted = await requestLocationPermission(); if (!granted) { return null; } } final isServiceEnabled = await Geolocator.isLocationServiceEnabled(); if (!isServiceEnabled) { return null; } return await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high, ); } catch (e) { print('Error getting current location: $e'); return null; } } Stream getLocationStream() { return Geolocator.getPositionStream( locationSettings: const LocationSettings( accuracy: LocationAccuracy.high, distanceFilter: 10, ), ); } Future calculateDistance( double startLatitude, double startLongitude, double endLatitude, double endLongitude, ) async { return Geolocator.distanceBetween( startLatitude, startLongitude, endLatitude, endLongitude, ) / 1000; // Convert to kilometers } Future openLocationSettings() async { await Geolocator.openLocationSettings(); } }