m3_lightmeter/lib/data/geolocation_service.dart
Vadim 7ad47c0636
ML-203 Logging EXIF data (#239)
* typos

* added `LogbookPhotosProvider`

* implemented `LogbookScreen`

* implemented `LogbookPhotoEditScreen`

* added photo update

* save geolocation

* added `CameraSettingsSection`

* adjusted logbook grid

* added hero animation

* fixed logbook list updates

* added empty logbook state

* added `saveLogbookPhotos` option

* fixed updating photos

* made `DialogPicker` content scrollable

* added tests for `LogbookPhotosProvider`

* made image preview full-width

* made note field multiline

* wip

* migrated to new iap service

* fixed unit tests

* typo

* fixed arb formatting

* stub logbook photos for tests

* implemented integration test for logbook

* moved date to title

* redundant bottom padding

* added logbook photo screen to screenshots generator

* Update settings.gradle

* aligned iap stub with iap release

* sync

* made logbook iap

* debug screenshots

* Update runner.dart

* fixed dialog picker of optional values

* added bottom padding to logbook edit screen

* fixed tests

* Create camera_stub_image.jpg

* Update films_provider_test.dart

* rename

* Update pubspec.yaml

* added logbook to pro features
2025-07-29 12:38:48 +02:00

55 lines
1.8 KiB
Dart

import 'package:geolocator/geolocator.dart';
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
class GeolocationService {
const GeolocationService();
/// Gets the current position and returns Coordinates if successful
/// Returns null if location services are disabled or permission is denied
Future<Coordinates?> getCurrentPosition() async {
try {
// Check if location services are enabled
final isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled();
if (!isLocationServiceEnabled) {
return null;
}
// Check location permission
final permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
final requestedPermission = await Geolocator.requestPermission();
if (requestedPermission == LocationPermission.denied ||
requestedPermission == LocationPermission.deniedForever) {
return null;
}
}
// Get current position
final position = await Geolocator.getCurrentPosition(
locationSettings: const LocationSettings(
timeLimit: Duration(seconds: 10),
),
);
return Coordinates(position.latitude, position.longitude);
} catch (e) {
// Return null if any error occurs (timeout, no GPS signal, etc.)
return null;
}
}
/// Checks if location services are enabled
Future<bool> isLocationServiceEnabled() async {
return await Geolocator.isLocationServiceEnabled();
}
/// Checks current location permission status
Future<LocationPermission> checkPermission() async {
return await Geolocator.checkPermission();
}
/// Requests location permission
Future<LocationPermission> requestPermission() async {
return await Geolocator.requestPermission();
}
}