Compare commits

...

4 Commits

2 changed files with 102 additions and 62 deletions

View File

@ -1,3 +1,4 @@
import 'package:covas_mobile/classes/alert.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:flutter_dotenv/flutter_dotenv.dart'; // Import dotenv import 'package:flutter_dotenv/flutter_dotenv.dart'; // Import dotenv
@ -51,46 +52,63 @@ class _MyHomePageState extends State<ListItemMenu> {
// Fetching events from API // Fetching events from API
static Future<List<Events>> getPosts() async { static Future<List<Events>> getPosts() async {
PermissionStatus status = await Permission.location.status; PermissionStatus status = await Permission.location.status;
final List<Events> body = [];
var url = Uri.parse("${globals.api}/events"); var url = Uri.parse("${globals.api}/events");
if (status.isGranted) { if (status.isGranted) {
print("Location permission granted"); print("Location permission granted");
// Get the current position with high accuracy // 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( const LocationSettings locationSettings = LocationSettings(
locationSettings: locationSettings, accuracy: LocationAccuracy.medium,
timeLimit: Duration(seconds: 5),
); );
// Calculate the boundaries Position? position;
double radiusInKm = 50; try {
double latDistance = radiusInKm / 111.0; position = await Geolocator.getCurrentPosition(
double lonDistance = locationSettings: locationSettings);
radiusInKm / (111.0 * cos(position.latitude * pi / 180)); } 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 minLat = position.latitude - latDistance;
double maxLat = position.latitude + latDistance; double maxLat = position.latitude + latDistance;
double minLon = position.longitude - lonDistance; double minLon = position.longitude - lonDistance;
double maxLon = position.longitude + lonDistance; double maxLon = position.longitude + lonDistance;
DateTime currentDatetime = DateTime.now(); DateTime currentDatetime = DateTime.now();
url = Uri.parse("${globals.api}/events/search" url = Uri.parse("${globals.api}/events/search"
"?min_lat=$minLat&max_lat=$maxLat" "?min_lat=$minLat&max_lat=$maxLat"
"&min_lon=$minLon&max_lon=$maxLon&current_datetime=${currentDatetime.toString()}"); "&min_lon=$minLon&max_lon=$maxLon&current_datetime=${currentDatetime.toString()}");
} }
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
var accessToken = prefs.getString("access_token") ?? ""; var accessToken = prefs.getString("access_token") ?? "";
final List<Events> body = [];
if (accessToken.isNotEmpty) { if (accessToken.isNotEmpty) {
final response = await http.get(url, headers: { final response = await http.get(url, headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
HttpHeaders.cookieHeader: "access_token=${accessToken}" HttpHeaders.cookieHeader: "access_token=${accessToken}"
}); });
final List body = json.decode(utf8.decode(response.bodyBytes)); final List body = json.decode(utf8.decode(response.bodyBytes));
return body.map((e) => Events.fromJson(e)).toList(); return body.map((e) => Events.fromJson(e)).toList();
}
} }
return body; return body;
} }
@ -119,8 +137,6 @@ class _MyHomePageState extends State<ListItemMenu> {
super.initState(); super.initState();
// Initialize data fetch when the page loads // Initialize data fetch when the page loads
_getCurrentLocation(); _getCurrentLocation();
Datepicker.text = DateFormat("dd-MM-yyyy").format(new DateTime.now());
} }
// Get the device's current location // Get the device's current location
@ -131,19 +147,32 @@ class _MyHomePageState extends State<ListItemMenu> {
print("Location permission granted"); print("Location permission granted");
// Get the current position with high accuracy // Get the current position with high accuracy
LocationSettings locationSettings = LocationSettings( const LocationSettings locationSettings = LocationSettings(
accuracy: LocationAccuracy.high, accuracy: LocationAccuracy.medium, timeLimit: Duration(seconds: 5));
distanceFilter: Position? position;
10, // Optional: Minimum distance (in meters) to trigger location update try {
); position = await Geolocator.getCurrentPosition(
locationSettings: locationSettings);
Position position = await Geolocator.getCurrentPosition( } on LocationServiceDisabledException {
locationSettings: locationSettings, // 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.');
}
}
// Reverse geocode: Get city and country from latitude and longitude using Mapbox Search API // Reverse geocode: Get city and country from latitude and longitude using Mapbox Search API
final place = if (position != null) {
await _getCityAndCountry(position.latitude, position.longitude); _getCityAndCountry(position!.latitude, position!.longitude);
}
} }
} }
@ -303,10 +332,7 @@ class _MyHomePageState extends State<ListItemMenu> {
DateTime dateEvent = DateTime.now(); DateTime dateEvent = DateTime.now();
DateTime? pickedDate = await showDatePicker( DateTime? pickedDate = await showDatePicker(
context: context, context: context, firstDate: dateEvent, lastDate: DateTime(2104));
firstDate: dateEvent,
initialDate: dateEvent,
lastDate: DateTime(2104));
if (pickedDate == null) return; if (pickedDate == null) return;
Datepicker.text = DateFormat("dd-MM-yyyy").format(pickedDate); Datepicker.text = DateFormat("dd-MM-yyyy").format(pickedDate);
} }

View File

@ -141,19 +141,33 @@ class _MapboxPagesState extends State<MapboxPages> with ShowErrorDialog {
"Location permissions are permanently denied. Enable them in settings."); "Location permissions are permanently denied. Enable them in settings.");
return; return;
} }
LocationSettings locationSettings = LocationSettings( const LocationSettings locationSettings = LocationSettings(
accuracy: LocationAccuracy.high, accuracy: LocationAccuracy.medium, timeLimit: Duration(seconds: 5));
distanceFilter: Position? position;
10, // Optional: Minimum distance (in meters) to trigger location update try {
); position = await Geolocator.getCurrentPosition(
locationSettings: locationSettings);
Position position = await Geolocator.getCurrentPosition( } on LocationServiceDisabledException {
locationSettings: locationSettings, // Handle location services disabled
); print('Location services are disabled.');
setState(() { position = await Geolocator.getLastKnownPosition();
userPosition = LatLng(position.latitude, position.longitude); if (position == null) {
isUserPositionInitialized = true; 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(); _initToken();
_getEventInfo(); _getEventInfo();
} catch (e) { } catch (e) {