mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2025-08-01 10:46:44 +00:00

* 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
55 lines
1.8 KiB
Dart
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();
|
|
}
|
|
}
|