Skip to content
Snippets Groups Projects
init_state.dart 2.03 KiB
Newer Older
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';

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();
  }

  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
  }