84 lines
2.3 KiB
Dart
84 lines
2.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:geolocator/geolocator.dart';
|
|
import 'package:get/get.dart';
|
|
import '../models/econtrol_model.dart';
|
|
import '../services/econtrol_service.dart';
|
|
|
|
class GasstationsController extends GetxController {
|
|
final isLoading = false.obs;
|
|
final isLoadingLocation = false.obs;
|
|
final eControlData = <EControlModel>[].obs;
|
|
|
|
@override
|
|
void onInit() {
|
|
_loadStationInfosList();
|
|
super.onInit();
|
|
}
|
|
|
|
@override
|
|
void onReady() {}
|
|
|
|
@override
|
|
void onClose() {}
|
|
|
|
Future<void> _loadStationInfosList() async {
|
|
isLoading.value = true;
|
|
bool serviceEnabled;
|
|
if (eControlData.isNotEmpty) {
|
|
eControlData.clear();
|
|
}
|
|
final eControlService = EControlService();
|
|
LocationPermission permission;
|
|
|
|
try {
|
|
isLoadingLocation.value = true;
|
|
|
|
// 1. Prüfen, ob Standortdienste aktiviert sind
|
|
serviceEnabled = await Geolocator.isLocationServiceEnabled();
|
|
if (!serviceEnabled) {
|
|
return Future.error('Standortdienste sind deaktiviert.');
|
|
}
|
|
|
|
// 2. Berechtigungen prüfen
|
|
permission = await Geolocator.checkPermission();
|
|
if (permission == LocationPermission.denied) {
|
|
permission = await Geolocator.requestPermission();
|
|
if (permission == LocationPermission.denied) {
|
|
return Future.error('Berechtigung verweigert.');
|
|
}
|
|
}
|
|
|
|
// 3. Position abrufen
|
|
Position position = await Geolocator.getCurrentPosition(
|
|
locationSettings: const LocationSettings(
|
|
accuracy: LocationAccuracy.high,
|
|
),
|
|
);
|
|
|
|
// 4. Standort über Backend-Proxy abrufen
|
|
var lat = position.latitude;
|
|
var lon = position.longitude;
|
|
// Simulate fetching data from an API or database
|
|
await eControlService.getEControlData(
|
|
lat,
|
|
lon,
|
|
'DIE',
|
|
);
|
|
eControlData.addAll(eControlService.eControlData);
|
|
} catch (e) {
|
|
Get.snackbar(
|
|
"Fehler",
|
|
"Standort konnte nicht abgerufen werden: $e",
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
backgroundColor: Colors.red[100],
|
|
colorText: Colors.red[900],
|
|
);
|
|
print("Fehler beim Abrufen des Standorts: $e");
|
|
} finally {
|
|
isLoadingLocation.value = false;
|
|
}
|
|
isLoading.value = false;
|
|
update();
|
|
}
|
|
}
|