Commit 71a8299

derdilla <derdilla06@gmail.com>
2023-07-13 16:13:44
allow adding comment only entries without activating incomplete values option
1 parent 7a586bc
Changed files (2)
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;