diameter/lib/models/glucose_target.dart
2022-03-21 01:07:29 +01:00

123 lines
3.0 KiB
Dart

import 'package:diameter/main.dart';
import 'package:diameter/models/settings.dart';
import 'package:flutter/material.dart';
import 'package:objectbox/objectbox.dart';
import 'package:diameter/objectbox.g.dart' show GlucoseTarget_;
@Entity(uid: 5041265995704044399)
@Sync()
class GlucoseTarget {
static final Box<GlucoseTarget> box = objectBox.store.box<GlucoseTarget>();
// properties
int id;
bool deleted;
int fromMgPerDL;
int toMgPerDl;
double fromMmolPerL;
double toMmolPerL;
int color;
// constructor
GlucoseTarget({
this.id = 0,
this.deleted = false,
required this.fromMgPerDL,
required this.toMgPerDl,
required this.fromMmolPerL,
required this.toMmolPerL,
required this.color,
});
// methods
static GlucoseTarget? get(int id) => box.get(id);
// methods
static List<GlucoseTarget> getAll() {
if (box.getAll().isEmpty) {
reset();
}
return box.getAll();
}
static Color getColorForGlucose({int mgPerDl = 0, double mmolPerL = 0}) {
if (box.getAll().isEmpty) {
reset();
}
Condition<GlucoseTarget> condition;
if (mgPerDl > 0 &&
(mmolPerL == 0 ||
Settings.glucoseMeasurement == GlucoseMeasurement.mgPerDl)) {
condition = GlucoseTarget_.fromMgPerDL.lessOrEqual(mgPerDl).and(GlucoseTarget_.toMgPerDl.greaterOrEqual(mgPerDl));
} else if (mmolPerL > 0 &&
(mgPerDl == 0 ||
Settings.glucoseMeasurement == GlucoseMeasurement.mmolPerL)) {
condition = GlucoseTarget_.fromMmolPerL.lessOrEqual(mmolPerL).and(GlucoseTarget_.toMmolPerL.greaterOrEqual(mmolPerL));
} else {
return Colors.black;
}
List<GlucoseTarget> result = box
.query(GlucoseTarget_.deleted.equals(false) & condition)
.build()
.find();
if (result.length != 1) {
return Colors.black;
}
return Color(result.single.color);
}
static void put(GlucoseTarget glucoseTarget) => box.put(glucoseTarget);
static void remove(int id) {
final item = box.get(id);
if (item != null) {
item.deleted = true;
box.put(item);
}
}
static void reset() {
box.removeAll();
List<GlucoseTarget> defaultTargets = [
GlucoseTarget(
fromMgPerDL: 0,
toMgPerDl: 69,
fromMmolPerL: 0,
toMmolPerL: 3.83,
color: Colors.red.value,
),
GlucoseTarget(
fromMgPerDL: 70,
toMgPerDl: 99,
fromMmolPerL: 3.84,
toMmolPerL: 5.48,
color: Colors.orange.value,
),
GlucoseTarget(
fromMgPerDL: 100,
toMgPerDl: 140,
fromMmolPerL: 5.49,
toMmolPerL: 7.77,
color: Colors.green.value,
),
GlucoseTarget(
fromMgPerDL: 141,
toMgPerDl: 240,
fromMmolPerL: 7.78,
toMmolPerL: 13.32,
color: Colors.orange.value,
),
GlucoseTarget(
fromMgPerDL: 241,
toMgPerDl: 999,
fromMmolPerL: 13.33,
toMmolPerL: 55.44,
color: Colors.deepOrange.value,
),
];
box.putMany(defaultTargets);
}
}