Commit 71a8299
Changed files (2)
lib
components
screens
lib/components/measurement_graph.dart
@@ -40,34 +40,35 @@ class _LineChartState extends State<_LineChart> {
? model.all
: model.getInTimeRange(settings.displayDataStart, end),
onData: (context, fetchedData) {
- if (fetchedData.length < 2) {
- return Text(AppLocalizations.of(context)!.errNotEnoughDataToGraph);
- }
List<BloodPressureRecord> data = fetchedData.toList();
data.sort((a, b) => a.creationTime.compareTo(b.creationTime));
- List<FlSpot> pulseSpots = [];
- List<FlSpot> diastolicSpots = [];
- List<FlSpot> systolicSpots = [];
+ List<FlSpot> pulSpots = [];
+ List<FlSpot> diaSpots = [];
+ List<FlSpot> sysSpots = [];
int pulMax = 0;
int diaMax = 0;
int sysMax = 0;
for (var e in data) {
final x = e.creationTime.millisecondsSinceEpoch.toDouble();
if (e.diastolic != null) {
- diastolicSpots.add(FlSpot(x, e.diastolic!.toDouble()));
+ diaSpots.add(FlSpot(x, e.diastolic!.toDouble()));
diaMax = max(diaMax, e.diastolic!);
}
if (e.systolic != null) {
- systolicSpots.add(FlSpot(x, e.systolic!.toDouble()));
+ sysSpots.add(FlSpot(x, e.systolic!.toDouble()));
sysMax = max(sysMax, e.systolic!);
}
if (e.pulse != null) {
- pulseSpots.add(FlSpot(x, e.pulse!.toDouble()));
+ pulSpots.add(FlSpot(x, e.pulse!.toDouble()));
pulMax = max(pulMax, e.pulse!);
}
}
+ if (fetchedData.length < 2 || (diaSpots.length < 2 && sysSpots.length < 2 && pulSpots.length < 2)) {
+ return Text(AppLocalizations.of(context)!.errNotEnoughDataToGraph);
+ }
+
const noTitels = AxisTitles(sideTitles: SideTitles(reservedSize: 40, showTitles: false));
return LineChart(
LineChartData(
@@ -132,7 +133,7 @@ class _LineChartState extends State<_LineChart> {
LineTouchTooltipData(tooltipMargin: -200, tooltipRoundedRadius: 20)),
lineBarsData: [
LineChartBarData(
- spots: pulseSpots,
+ spots: pulSpots,
dotData: const FlDotData(
show: false,
),
@@ -140,7 +141,7 @@ class _LineChartState extends State<_LineChart> {
barWidth: settings.graphLineThickness,
),
LineChartBarData(
- spots: diastolicSpots,
+ spots: diaSpots,
color: settings.diaColor,
barWidth: settings.graphLineThickness,
dotData: const FlDotData(
@@ -152,7 +153,7 @@ class _LineChartState extends State<_LineChart> {
cutOffY: settings.diaWarn.toDouble(),
applyCutOffY: true)),
LineChartBarData(
- spots: systolicSpots,
+ spots: sysSpots,
color: settings.sysColor,
barWidth: settings.graphLineThickness,
dotData: const FlDotData(
lib/screens/add_measurement.dart
@@ -100,6 +100,7 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
initialValue: (_systolic ?? '').toString(),
hintText: AppLocalizations.of(context)!.sysLong,
basicValidation: !settings.allowMissingValues,
+ preValidion: (v) => _systolic = int.tryParse(v ?? ''),
focusNode: _sysFocusNode,
additionalValidator: (String? value) {
_systolic = int.tryParse(value ?? '');
@@ -111,6 +112,7 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
initialValue: (_diastolic ?? '').toString(),
hintText: AppLocalizations.of(context)!.diaLong,
basicValidation: !settings.allowMissingValues,
+ preValidion: (v) => _diastolic = int.tryParse(v ?? ''),
additionalValidator: (String? value) {
if (settings.validateInputs && (int.tryParse(value ?? '') ?? 0) >= (_systolic ?? 1)) {
return AppLocalizations.of(context)?.errDiaGtSys;
@@ -124,6 +126,7 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
initialValue: (_pulse ?? '').toString(),
hintText: AppLocalizations.of(context)!.pulLong,
basicValidation: !settings.allowMissingValues,
+ preValidion: (v) => _pulse = int.tryParse(v ?? ''),
additionalValidator: (String? value) {
if (settings.validateInputs && (int.tryParse(value ?? '') ?? 0) >= 600) { // https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3273956/
return AppLocalizations.of(context)?.errUnrealistic;
@@ -168,15 +171,27 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
if (_formKey.currentState!.validate()) {
final settings = Provider.of<Settings>(context, listen: false);
final model = Provider.of<BloodPressureModel>(context, listen: false);
- final exporter = Exporter(context);
final navigator = Navigator.of(context);
await model.add(BloodPressureRecord(_time, _systolic, _diastolic, _pulse, _note));
- if (settings.exportAfterEveryEntry) {
+ if (settings.exportAfterEveryEntry && context.mounted) {
+ final exporter = Exporter(context);
+ exporter.export();
+ }
+ navigator.pop();
+ } else if (_systolic == null && _diastolic == null && _pulse == null && _note != null) {
+ final settings = Provider.of<Settings>(context, listen: false);
+ final model = Provider.of<BloodPressureModel>(context, listen: false);
+ final navigator = Navigator.of(context);
+
+ await model.add(BloodPressureRecord(_time, _systolic, _diastolic, _pulse, _note));
+ if (settings.exportAfterEveryEntry && context.mounted) {
+ final exporter = Exporter(context);
exporter.export();
}
navigator.pop();
}
+ print(_systolic);
},
style: ElevatedButton.styleFrom(backgroundColor: Theme.of(context).primaryColor),
child: Text(AppLocalizations.of(context)!.btnSave))
@@ -198,10 +213,11 @@ class ValueInput extends StatelessWidget {
final String hintText;
final FocusNode? focusNode;
final bool basicValidation;
+ final void Function(String?)? preValidion;
final FormFieldValidator<String> additionalValidator;
const ValueInput({super.key, required this.initialValue, required this.hintText, this.focusNode, this.basicValidation = true,
- required this.additionalValidator});
+ this.preValidion, required this.additionalValidator});
@override
Widget build(BuildContext context) {
@@ -218,6 +234,7 @@ class ValueInput extends StatelessWidget {
}
},
validator: (String? value) {
+ if (preValidion != null) preValidion!(value);
if (basicValidation) {
if (value == null || value.isEmpty || (int.tryParse(value) == null)) {
return AppLocalizations.of(context)?.errNaN;