Files
pfm-ocr/lib/core/location/location_service.dart
T

47 lines
1.4 KiB
Dart

import 'package:flutter/foundation.dart';
import 'package:geolocator/geolocator.dart';
class LocationService {
static Future<Position?> Function()? mockDeterminator;
static Future<Position?> determinePosition() async {
if (mockDeterminator != null) {
return mockDeterminator!();
}
try {
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
debugPrint('Location services are disabled.');
return null;
}
LocationPermission permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
debugPrint('Location permission denied.');
return null;
}
}
if (permission == LocationPermission.deniedForever) {
debugPrint('Location permission denied forever.');
return null;
}
try {
return await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high,
timeLimit: const Duration(seconds: 5),
);
} catch (e) {
debugPrint('getCurrentPosition failed: $e. Attempting getLastKnownPosition...');
return await Geolocator.getLastKnownPosition();
}
} catch (e) {
debugPrint('Error in LocationService: $e');
return null;
}
}
}