ionic-planb-logistic-app-fl.../lib/services/location/location_service.dart

70 lines
1.8 KiB
Dart

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<bool> requestLocationPermission() async {
final status = await Permission.location.request();
return status.isGranted;
}
Future<bool> checkLocationPermission() async {
final status = await Permission.location.status;
return status.isGranted;
}
Future<Position?> 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<Position> getLocationStream() {
return Geolocator.getPositionStream(
locationSettings: const LocationSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 10,
),
);
}
Future<double> calculateDistance(
double startLatitude,
double startLongitude,
double endLatitude,
double endLongitude,
) async {
return Geolocator.distanceBetween(
startLatitude,
startLongitude,
endLatitude,
endLongitude,
) / 1000; // Convert to kilometers
}
Future<void> openLocationSettings() async {
await Geolocator.openLocationSettings();
}
}