import 'dart:io'; import 'dart:async'; import 'dart:convert'; import 'dart:typed_data'; import 'package:app/consts.dart'; import '../data_classes.dart'; import '../server_requests/fetch_markers.dart'; import '../server_requests/fetch_relation.dart'; /// initialiseState makes three requests to the server, one requesting /// measurements for the selected relation, the other requesting the relation, /// and the last requesting the list of all system lakes Future<void> initialiseState() async { bool serverConnection = true; late Future<List<Measurement>> markerListFuture; late Future<Uint8List> relationFuture; try { // Try to fetch measurement data from server markerListFuture = fetchMeasurements().then((fetchResult) { List<Measurement> measurements = fetchResult.measurements; serverConnection = fetchResult.connected; // Return measurements return measurements; }).catchError((error) { serverConnection = false; throw Exception("Failed to fetch measurements: $error"); }); // If measurements were fetched successfully, request relation if (serverConnection) { relationFuture = fetchRelation(); } /*else { // Read last saved data relationFuture = loadSavedRelation(); }*/ initSearchOptions(); //selectedRelation = await relationFuture; selectedRelation = Uint8List(0); selectedMarkerList = await markerListFuture; } catch (e) { // Handle any errors that occur during the initialization process print("Error during initialization: $e"); } } /// initSearchOptions fetches a list of all lake names in the system /// and initialises lakeSearchOptions Future<void> initSearchOptions() async { try { HttpClient client = HttpClient() ..badCertificateCallback = // NB: temporary disable SSL certificate validation (X509Certificate cert, String host, int port) => true; var request = await client.getUrl(Uri.parse('${serverURI}get_lake_names')); var response = await request.close(); if (response.statusCode == 200) { var responseBody = await response.transform(utf8.decoder).join(); if (responseBody.isNotEmpty) { var jsonData = json.decode(responseBody); if (jsonData != null && jsonData is List) { lakeSearchOptions = jsonData.map<String>((item) => item.toString()).toList(); return; } } } } catch (e) { lakeSearchOptions = ["Mjøsa"]; // Init default list } }