diff --git a/app/lib/pages/marker_handler/load_saved_data.dart b/app/lib/pages/marker_handler/load_saved_data.dart new file mode 100644 index 0000000000000000000000000000000000000000..b9ea25e30a4baf93f8eef686f056afc83e05a737 --- /dev/null +++ b/app/lib/pages/marker_handler/load_saved_data.dart @@ -0,0 +1,51 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; +import 'marker_data.dart'; +import '../consts.dart'; +import 'package:path_provider/path_provider.dart'; +import 'dart:typed_data'; + +/// loadSavedData parses json data from a saved file, either to a list +/// of Measurement objects or a Uint8List object depending if it reads +/// measurement data or relation data. +Future<FetchResult> loadSavedData() async { + Uint8List relation; + List<Measurement> measurements = []; + + // Get latest saved data from file if the server does not respond + Directory appDocumentsDirectory = await getApplicationDocumentsDirectory(); + String filePath = '${appDocumentsDirectory.path}/last_data.sjon'; + + // Read measurement 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 + measurements = jsonData.map((data) => Measurement.fromJson(data)).toList(); + } else { + throw Exception('File does not exist'); + } + + filePath = '${appDocumentsDirectory.path}/relation.json'; + + // Read relation file contents + file = File(filePath); + if (await file.exists()) { + String contents = await file.readAsString(); + List<dynamic> jsonData = json.decode(contents); // Parse JSON string from file + relation = Uint8List.fromList(utf8.encode(jsonData.toString())); + } else { + throw Exception('File does not exist'); + } + + return FetchResult(relation, measurements, false); +} + +class FetchResult { + final Uint8List relation; + final List<Measurement> measurements; + final bool connected; + + FetchResult(this.relation, this.measurements, this.connected); +}