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 request = await client.getUrl(Uri.parse('${serverURI}get_relation')); 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(); } } Future<Uint8List> loadSavedRelation() async { // 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 File file = File(filePath); if (await file.exists()) { String contents = await file.readAsString(); List<dynamic> jsonData = json.decode(contents); // Parse JSON string from file Uint8List relation = Uint8List.fromList(utf8.encode(jsonData.toString())); return relation; } else { throw Exception('File does not exist'); } }