diff --git a/covas_mobile/lib/pages/ListItemMenu.dart b/covas_mobile/lib/pages/ListItemMenu.dart index 047c501..f0f581c 100644 --- a/covas_mobile/lib/pages/ListItemMenu.dart +++ b/covas_mobile/lib/pages/ListItemMenu.dart @@ -1,3 +1,4 @@ +import 'package:covas_mobile/classes/alert.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:flutter_dotenv/flutter_dotenv.dart'; // Import dotenv @@ -51,46 +52,63 @@ class _MyHomePageState extends State { // Fetching events from API static Future> getPosts() async { PermissionStatus status = await Permission.location.status; - + final List body = []; var url = Uri.parse("${globals.api}/events"); if (status.isGranted) { print("Location permission granted"); // Get the current position with high accuracy - LocationSettings locationSettings = LocationSettings( - accuracy: LocationAccuracy.high, - distanceFilter: - 10, // Optional: Minimum distance (in meters) to trigger location update - ); - Position position = await Geolocator.getCurrentPosition( - locationSettings: locationSettings, + const LocationSettings locationSettings = LocationSettings( + accuracy: LocationAccuracy.medium, + timeLimit: Duration(seconds: 5), ); - // Calculate the boundaries - double radiusInKm = 50; - double latDistance = radiusInKm / 111.0; - double lonDistance = - radiusInKm / (111.0 * cos(position.latitude * pi / 180)); + Position? position; + try { + position = await Geolocator.getCurrentPosition( + locationSettings: locationSettings); + } on LocationServiceDisabledException { + // Handle location services disabled + print('Location services are disabled.'); + position = await Geolocator.getLastKnownPosition(); + if (position == null) { + print('No last known position available.'); + } + } catch (e) { + // Handle other errors + print('Failed to get location: $e'); + position = await Geolocator.getLastKnownPosition(); + if (position == null) { + print('No last known position available.'); + } + } + if (position != null) { + // Calculate the boundaries + double radiusInKm = 50; + double latDistance = radiusInKm / 111.0; + double lonDistance = + radiusInKm / (111.0 * cos(position.latitude * pi / 180)); - double minLat = position.latitude - latDistance; - double maxLat = position.latitude + latDistance; - double minLon = position.longitude - lonDistance; - double maxLon = position.longitude + lonDistance; - DateTime currentDatetime = DateTime.now(); - url = Uri.parse("${globals.api}/events/search" - "?min_lat=$minLat&max_lat=$maxLat" - "&min_lon=$minLon&max_lon=$maxLon¤t_datetime=${currentDatetime.toString()}"); - } - SharedPreferences prefs = await SharedPreferences.getInstance(); - var accessToken = prefs.getString("access_token") ?? ""; - final List body = []; - if (accessToken.isNotEmpty) { - final response = await http.get(url, headers: { - "Content-Type": "application/json", - HttpHeaders.cookieHeader: "access_token=${accessToken}" - }); - final List body = json.decode(utf8.decode(response.bodyBytes)); - return body.map((e) => Events.fromJson(e)).toList(); + double minLat = position.latitude - latDistance; + double maxLat = position.latitude + latDistance; + double minLon = position.longitude - lonDistance; + double maxLon = position.longitude + lonDistance; + DateTime currentDatetime = DateTime.now(); + url = Uri.parse("${globals.api}/events/search" + "?min_lat=$minLat&max_lat=$maxLat" + "&min_lon=$minLon&max_lon=$maxLon¤t_datetime=${currentDatetime.toString()}"); + } + SharedPreferences prefs = await SharedPreferences.getInstance(); + var accessToken = prefs.getString("access_token") ?? ""; + + if (accessToken.isNotEmpty) { + final response = await http.get(url, headers: { + "Content-Type": "application/json", + HttpHeaders.cookieHeader: "access_token=${accessToken}" + }); + final List body = json.decode(utf8.decode(response.bodyBytes)); + return body.map((e) => Events.fromJson(e)).toList(); + } } return body; } diff --git a/covas_mobile/lib/pages/MapboxPages.dart b/covas_mobile/lib/pages/MapboxPages.dart index 69cb99f..cd9f7a7 100644 --- a/covas_mobile/lib/pages/MapboxPages.dart +++ b/covas_mobile/lib/pages/MapboxPages.dart @@ -141,19 +141,33 @@ class _MapboxPagesState extends State with ShowErrorDialog { "Location permissions are permanently denied. Enable them in settings."); return; } - LocationSettings locationSettings = LocationSettings( - accuracy: LocationAccuracy.high, - distanceFilter: - 10, // Optional: Minimum distance (in meters) to trigger location update - ); - - Position position = await Geolocator.getCurrentPosition( - locationSettings: locationSettings, - ); - setState(() { - userPosition = LatLng(position.latitude, position.longitude); - isUserPositionInitialized = true; - }); + const LocationSettings locationSettings = LocationSettings( + accuracy: LocationAccuracy.medium, timeLimit: Duration(seconds: 5)); + Position? position; + try { + position = await Geolocator.getCurrentPosition( + locationSettings: locationSettings); + } on LocationServiceDisabledException { + // Handle location services disabled + print('Location services are disabled.'); + position = await Geolocator.getLastKnownPosition(); + if (position == null) { + print('No last known position available.'); + } + } catch (e) { + // Handle other errors + print('Failed to get location: $e'); + position = await Geolocator.getLastKnownPosition(); + if (position == null) { + print('No last known position available.'); + } + } + if (position != null) { + setState(() { + userPosition = LatLng(position!.latitude, position!.longitude); + isUserPositionInitialized = true; + }); + } _initToken(); _getEventInfo(); } catch (e) {