158 lines
3.9 KiB
Dart
158 lines
3.9 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;
|
|
String? source;
|
|
|
|
// constructor
|
|
GlucoseTarget({
|
|
this.id = 0,
|
|
this.deleted = false,
|
|
required this.fromMgPerDL,
|
|
required this.toMgPerDl,
|
|
required this.fromMmolPerL,
|
|
required this.toMmolPerL,
|
|
required this.color,
|
|
this.source,
|
|
});
|
|
|
|
// 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);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
final Map<String, dynamic> data = <String, dynamic>{};
|
|
data['id'] = id;
|
|
data['deleted'] = deleted;
|
|
data['fromMgPerDL'] = fromMgPerDL;
|
|
data['toMgPerDl'] = toMgPerDl;
|
|
data['fromMmolPerL'] = fromMmolPerL;
|
|
data['toMmolPerL'] = toMmolPerL;
|
|
data['color'] = color;
|
|
return data;
|
|
}
|
|
|
|
static String? putFromJson(Map<String, dynamic> json, bool overrideExisting, String? source) {
|
|
final glucoseTarget = GlucoseTarget(
|
|
id: overrideExisting ? json['id'] : 0,
|
|
deleted: json['deleted'],
|
|
fromMgPerDL: json['fromMgPerDL'],
|
|
toMgPerDl: json['toMgPerDl'],
|
|
fromMmolPerL: json['fromMmolPerL'],
|
|
toMmolPerL: json['toMmolPerL'],
|
|
color: json['color'],
|
|
source: source,
|
|
);
|
|
|
|
GlucoseTarget.put(glucoseTarget);
|
|
|
|
return null;
|
|
}
|
|
}
|