import 'dart:async'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:location/location.dart'; import 'package:ride/constant/box_name.dart'; import 'package:ride/constant/links.dart'; import 'package:ride/controller/functions/crud.dart'; import 'package:ride/main.dart'; import '../home/captin/home_captain_controller.dart'; // LocationController.dart class LocationController extends GetxController { LocationData? _currentLocation; late Location location; bool isLoading = false; LatLng myLocation = const LatLng(32.3, 36.3); LocationData? get currentLocation => _currentLocation; Timer? _locationTimer; @override void onInit() async { super.onInit(); location = Location(); } void startLocationUpdates() async { _locationTimer = Timer.periodic(const Duration(seconds: 20), (timer) async { await getLocation(); await CRUD().post(link: AppLink.addCarsLocationByPassenger, payload: { 'driver_id': box.read(BoxName.driverID).toString(), 'latitude': myLocation.latitude.toString(), 'longitude': myLocation.longitude.toString(), }); }); } void stopLocationUpdates() { _locationTimer?.cancel(); } Future getLocation() async { isLoading = true; update(); bool serviceEnabled; PermissionStatus permissionGranted; // Check if location services are enabled serviceEnabled = await location.serviceEnabled(); if (!serviceEnabled) { serviceEnabled = await location.requestService(); if (!serviceEnabled) { // Location services are still not enabled, handle the error return; } } // Check if the app has permission to access location permissionGranted = await location.hasPermission(); if (permissionGranted == PermissionStatus.denied) { permissionGranted = await location.requestPermission(); if (permissionGranted != PermissionStatus.granted) { // Location permission is still not granted, handle the error return; } } // Configure location accuracy // LocationAccuracy desiredAccuracy = LocationAccuracy.high; // Get the current location LocationData _locationData = await location.getLocation(); myLocation = (_locationData.latitude != null && _locationData.longitude != null ? LatLng(_locationData.latitude!, _locationData.longitude!) : null)!; // Print location details print('Accuracy: ${_locationData.accuracy}'); print('Latitude: ${_locationData.latitude}'); print('Longitude: ${_locationData.longitude}'); print('Time: ${_locationData.time}'); isLoading = false; update(); } }