Skip to content
Snippets Groups Projects
Commit e1e97656 authored by Sara Savanovic Djordjevic's avatar Sara Savanovic Djordjevic
Browse files

add: sattelite layer button

parent bb14fd70
No related branches found
No related tags found
1 merge request!2App2
...@@ -7,12 +7,16 @@ import 'marker_data.dart'; ...@@ -7,12 +7,16 @@ import 'marker_data.dart';
// fetchMarkerTemplate requests all marker data from the server // fetchMarkerTemplate requests all marker data from the server
Future<List<Measurement>> fetchMarkerData() async { Future<List<Measurement>> fetchMarkerData() async {
try { try {
// Custom HTTP client
HttpClient client = HttpClient() HttpClient client = HttpClient()
..badCertificateCallback = (X509Certificate cert, String host, int port) => true; ..badCertificateCallback = // NB: temporary disable SSL certificate validation
(X509Certificate cert, String host, int port) => true;
// Request makers from API and wait for response
var request = await client.getUrl(Uri.parse(serverURI + mapEndpoint)); var request = await client.getUrl(Uri.parse(serverURI + mapEndpoint));
var response = await request.close(); var response = await request.close();
// Attempt to parse json if request is ok
if (response.statusCode == 200) { if (response.statusCode == 200) {
var responseBody = await response.transform(utf8.decoder).join(); var responseBody = await response.transform(utf8.decoder).join();
...@@ -22,10 +26,10 @@ Future<List<Measurement>> fetchMarkerData() async { ...@@ -22,10 +26,10 @@ Future<List<Measurement>> fetchMarkerData() async {
} else { } else {
print('Request failed with status: ${response.statusCode}'); print('Request failed with status: ${response.statusCode}');
throw Exception('Failed to parse marker data'); throw Exception('failed to parse marker data');
} }
} catch (e) { } catch (e) {
print('Error: $e'); print('Request failed with error ${e}');
throw Exception('failed to connect to the server. Please check your network connection'); throw Exception('failed to connect to the server. Please check your network connection: ${e}');
} }
} }
import 'dart:core';
class Measurement { class Measurement {
int measurementID; int measurementID;
int timeMeasured; DateTime timeMeasured;
Sensor sensor; Sensor sensor;
List<Data> dataList; List<Data> dataList;
List<Corner> cornerList; List<Corner> cornerList;
...@@ -18,7 +20,7 @@ class Measurement { ...@@ -18,7 +20,7 @@ class Measurement {
factory Measurement.Measurement(Map<String, dynamic> json) { factory Measurement.Measurement(Map<String, dynamic> json) {
return Measurement( return Measurement(
measurementID: json['MeasurementID'], measurementID: json['MeasurementID'],
timeMeasured: json['TimeMeasured'], timeMeasured: DateTime.parse(json['TimeMeasured']),
sensor: Sensor.fromJson(json['Sensor']), sensor: Sensor.fromJson(json['Sensor']),
dataList: (json['Data'] as List<dynamic>) dataList: (json['Data'] as List<dynamic>)
.map((data) => Data.fromJson(data)) .map((data) => Data.fromJson(data))
......
...@@ -20,6 +20,7 @@ class _MapContainerWidgetState extends State<MapContainerWidget> { ...@@ -20,6 +20,7 @@ class _MapContainerWidgetState extends State<MapContainerWidget> {
Measurement? selectedMarker; Measurement? selectedMarker;
bool isMinimized = true; // Quick view box state tacker bool isMinimized = true; // Quick view box state tacker
bool satLayer = false; // Satellite layer visibility tracker
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
...@@ -55,7 +56,7 @@ class _MapContainerWidgetState extends State<MapContainerWidget> { ...@@ -55,7 +56,7 @@ class _MapContainerWidgetState extends State<MapContainerWidget> {
polygons: widget.markerList.map((Measurement measurement) { polygons: widget.markerList.map((Measurement measurement) {
return Polygon( return Polygon(
points: measurement.cornerList.map((Corner corner) { points: measurement.cornerList.map((Corner corner) {
// Map corners to LatLng objects // Map corner coordinates to LatLng objects
return LatLng(corner.latitude, corner.longitude); return LatLng(corner.latitude, corner.longitude);
}).toList(), }).toList(),
/*onTap: () { /*onTap: () {
...@@ -112,6 +113,25 @@ class _MapContainerWidgetState extends State<MapContainerWidget> { ...@@ -112,6 +113,25 @@ class _MapContainerWidgetState extends State<MapContainerWidget> {
), ),
), ),
), ),
Positioned(
top: 10,
right: 10,
child: GestureDetector(
onTap: () {
setState(() {
satLayer = !satLayer; // Toggle satellite layer state on press
});
},
child: Container(
padding: const EdgeInsets.all(8),
decoration: satLayer ? const BoxDecoration( // Add decoration only when pressed
shape: BoxShape.circle,
color: Colors.blue,
) : null,
child: const Icon(Icons.satellite_alt_outlined),
),
),
),
], ],
), ),
), ),
......
No preview for this file type
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment