Select Git revision
fetch_relation.dart
-
Sara Savanovic Djordjevic authoredSara Savanovic Djordjevic authored
fetch_relation.dart 2.39 KiB
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);
}
}