import 'dart:io'; import 'dart:async'; import 'dart:convert'; import 'dart:typed_data'; import 'package:path_provider/path_provider.dart'; import '../../consts.dart'; /// Fetch relation data from server Future<Uint8List> fetchRelation() async { try { // Custom HTTP client HttpClient client = HttpClient() ..badCertificateCallback = // NB: temporary disable SSL certificate validation (X509Certificate cert, String host, int port) => true; // Execute request to to get_relation endpoint var parameterValue = 'Mjosa'; // NB temp hardcoded, should use selectedLake directly in url param //var request = await client.getUrl(Uri.parse('${serverURI}get_relation')); var request = await client.getUrl(Uri.parse('${serverURI}get_relation?lake=' '${Uri.encodeComponent(parameterValue)}')); var response = await request.close(); // Close response body at end of function // Try to parse body to JSON if request is ok if (response.statusCode == 200) { var responseBody = await response.transform(utf8.decoder).join(); if (responseBody.isNotEmpty) { Directory appDocumentsDirectory = await getApplicationDocumentsDirectory(); String filePath = '${appDocumentsDirectory.path}/last_relation.json'; try { // Write most recent time of update to file await File(filePath).writeAsString(responseBody, mode: FileMode.write); print('Relation written to file'); } catch (error) { print('Error in writing to file: $error');} // Return relation data from the response body return Uint8List.fromList(utf8.encode(responseBody)); } } return loadSavedRelation(); } catch (e) { return loadSavedRelation(); } } /// Load last saved relation data form last_relation.json Future<Uint8List> loadSavedRelation() async { try { // Get latest saved relation from file if the server does not respond Directory appDocumentsDirectory = await getApplicationDocumentsDirectory(); String filePath = '${appDocumentsDirectory.path}/last_relation.json'; // Read file contents as bytes File file = File(filePath); if (await file.exists()) { Uint8List bytes = await file.readAsBytes(); return bytes; } else { throw Exception('Relation file does not exist'); } } catch (error) { print('Error in reading relation from file: $error'); return Uint8List(0); } }