Commit bd57794
Changed files (3)
lib/model/blood_pressure.dart
@@ -87,8 +87,8 @@ class BloodPressureModel extends ChangeNotifier {
return UnmodifiableListView(recordsInRange);
}
- Future<List<Map<String, Object?>>> get bloodPressureModel {
- return _database.query('bloodPressureModel', columns: ['*']);
+ Future<List<BloodPressureRecord>> get all async {
+ return _convert(await _database.query('bloodPressureModel', columns: ['*']));
}
Future<int> get count async {
lib/model/blood_pressure_analyzer.dart
@@ -32,12 +32,12 @@ class BloodPressureAnalyser {
List<List<int>> allPulValuesRelativeToTime = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]];
// sort all data
- final dbRes = await _model.bloodPressureModel;
+ final dbRes = await _model.all;
for (var entry in dbRes) {
- DateTime ts = DateTime.fromMillisecondsSinceEpoch(entry['timestamp'] as int);
- allDiaValuesRelativeToTime[ts.hour].add(entry['diastolic'] as int);
- allSysValuesRelativeToTime[ts.hour].add(entry['systolic'] as int);
- allPulValuesRelativeToTime[ts.hour].add(entry['pulse'] as int);
+ DateTime ts = DateTime.fromMillisecondsSinceEpoch(entry.creationTime.millisecondsSinceEpoch);
+ allDiaValuesRelativeToTime[ts.hour].add(entry.diastolic);
+ allSysValuesRelativeToTime[ts.hour].add(entry.systolic);
+ allPulValuesRelativeToTime[ts.hour].add(entry.pulse);
}
for(int i = 0; i < 24; i++) {
if (allDiaValuesRelativeToTime[i].isEmpty) {
test/ram_only_implementations.dart
@@ -0,0 +1,92 @@
+import 'dart:collection';
+
+import 'package:blood_pressure_app/model/blood_pressure.dart';
+import 'package:flutter/material.dart';
+
+class RamBloodPressureModel extends ChangeNotifier implements BloodPressureModel {
+ final List<BloodPressureRecord> _records = [];
+
+
+ @override
+ Future<void> add(BloodPressureRecord measurement) async {
+ _records.add(measurement);
+ notifyListeners();
+ }
+
+ @override
+ Future<int> get avgDia async => _records.map((e) => e.diastolic).reduce((a, b) => a+b) ~/ _records.length;
+
+ @override
+ Future<int> get avgPul async => _records.map((e) => e.pulse).reduce((a, b) => a+b) ~/ _records.length;
+
+ @override
+ Future<int> get avgSys async => _records.map((e) => e.systolic).reduce((a, b) => a+b) ~/ _records.length;
+
+ @override
+ Future<List<BloodPressureRecord>> get all async => _records;
+
+ @override
+ void close() {}
+
+ @override
+ Future<int> get count async => _records.length;
+
+ @override
+ Future<void> delete(DateTime timestamp) async {
+ _records.removeWhere((element) => element.creationTime.isAtSameMomentAs(timestamp));
+ }
+
+ @override
+ Future<DateTime> get firstDay async {
+ _records.sort((a, b) => a.creationTime.compareTo(b.creationTime));
+ return _records.first.creationTime;
+ }
+
+ @override
+ Future<DateTime> get lastDay async {
+ _records.sort((a, b) => a.creationTime.compareTo(b.creationTime));
+ return _records.last.creationTime;
+ }
+
+ @override
+ Future<UnmodifiableListView<BloodPressureRecord>> getInTimeRange(DateTime from, DateTime to) async {
+ List<BloodPressureRecord> recordsInTime = [];
+ for(final e in _records) {
+ if (e.creationTime.isAfter(from) && e.creationTime.isBefore(to)) {
+ recordsInTime.add(e);
+ }
+ }
+ return UnmodifiableListView(recordsInTime);
+ }
+
+ @override
+ Future<int> get maxDia async => _records.reduce((a,b) => (a.diastolic>=b.diastolic) ? a : b).diastolic;
+
+ @override
+ Future<int> get maxPul async => _records.reduce((a,b) => (a.pulse>=b.pulse) ? a : b).pulse;
+
+ @override
+ Future<int> get maxSys async => _records.reduce((a,b) => (a.systolic>=b.systolic) ? a : b).systolic;
+
+ @override
+ Future<int> get minDia async => _records.reduce((a,b) => (a.diastolic<=b.diastolic) ? a : b).diastolic;
+
+ @override
+ Future<int> get minPul async => _records.reduce((a,b) => (a.pulse<=b.pulse) ? a : b).pulse;
+
+ @override
+ Future<int> get minSys async => _records.reduce((a,b) => (a.systolic<=b.systolic) ? a : b).systolic;
+
+ @override
+ Future<void> import(void Function(bool p1, String? p2) callback) {
+ // TODO: implement import
+ throw UnimplementedError();
+ }
+
+ @override
+ Future<void> save(void Function(bool success, String? msg) callback, {bool exportAsText = false}) {
+ // TODO: implement save
+ throw UnimplementedError();
+ }
+
+}
\ No newline at end of file