Newer
Older
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';
Future<void> initialiseState() async{
bool serverConnection = true;
late Future<List<Measurement>> markerListFuture;
late Future<Uint8List> relationFuture;
// Try to fetch measurement data from server
markerListFuture = fetchMeasurements().then((fetchResult) {
List<Measurement> measurements = fetchResult.measurements;
serverConnection = fetchResult.connected;
// Return the measurements
return measurements;
}).catchError((error) {
serverConnection = false;
throw Exception("Failed to fetch measurements: $error");
});
// Attempt to fetch relation from server if app establishes connection
if (serverConnection) {
relationFuture = fetchRelation();
} else { // Read last saved data
relationFuture = loadSavedRelation();
}
initSearchOptions();
selectedRelation = await relationFuture;
selectedMarkerList = await markerListFuture;
/// 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
}