Commit 72cf954

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-04-19 18:49:41
replace uses of old blood pressure record
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 8c92835
app/lib/components/dialoges/add_measurement_dialoge.dart
@@ -6,12 +6,11 @@ import 'package:blood_pressure_app/components/date_time_picker.dart';
 import 'package:blood_pressure_app/components/dialoges/fullscreen_dialoge.dart';
 import 'package:blood_pressure_app/components/settings/settings_widgets.dart';
 import 'package:blood_pressure_app/model/blood_pressure/needle_pin.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
 import 'package:blood_pressure_app/model/storage/storage.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:health_data_store/health_data_store.dart' hide BloodPressureRecord;
+import 'package:health_data_store/health_data_store.dart';
 import 'package:intl/intl.dart';
 
 /// Input mask for entering measurements.
app/lib/components/measurement_list/measurement_list.dart
@@ -1,11 +1,10 @@
 import 'package:blood_pressure_app/components/measurement_list/intake_list_entry.dart';
 import 'package:blood_pressure_app/components/measurement_list/measurement_list_entry.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
 import 'package:blood_pressure_app/model/storage/settings_store.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:health_data_store/health_data_store.dart' show MedicineIntake, MedicineIntakeRepository;
+import 'package:health_data_store/health_data_store.dart' show BloodPressureRecord, MedicineIntake, MedicineIntakeRepository;
 
 /// List that renders measurements and medicine intakes.
 ///
app/lib/screens/elements/blood_pressure_builder.dart
@@ -1,11 +1,10 @@
 import 'dart:collection';
 
-import 'package:blood_pressure_app/components/consistent_future_builder.dart';
-import 'package:blood_pressure_app/model/blood_pressure/model.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
+import 'package:blood_pressure_app/components/repository_builder.dart';
 import 'package:blood_pressure_app/model/storage/intervall_store.dart';
+import 'package:collection/collection.dart';
 import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
+import 'package:health_data_store/health_data_store.dart';
 
 /// Shorthand class for getting the blood pressure values.
 class BloodPressureBuilder extends StatelessWidget {
@@ -23,17 +22,12 @@ class BloodPressureBuilder extends StatelessWidget {
   final IntervallStoreManagerLocation rangeType;
   
   @override
-  Widget build(BuildContext context) => Consumer<BloodPressureModel>(
-      builder: (context, model, child) =>
-        Consumer<IntervallStoreManager>(
-          builder: (context, intervallManager, child) {
-            final range = intervallManager.get(rangeType).currentRange;
-            return ConsistentFutureBuilder<UnmodifiableListView<BloodPressureRecord>>(
-              future: model.getInTimeRange(range.start, range.end),
-              onData: onData,
-            );
-          },
-        ),
-    );
+  Widget build(BuildContext context) =>
+    RepositoryBuilder<BloodPressureRecord, BloodPressureRepository>(
+      rangeType: rangeType,
+      // TODO: Figure out why type safety isn't possible. (see home_screen for more info)
+      onData: (context, List<dynamic> data) =>
+        onData(context, UnmodifiableListView(data.cast())),
+  );
   
 }
app/lib/screens/elements/legacy_measurement_list.dart
@@ -1,15 +1,15 @@
+import 'dart:async';
 import 'dart:collection';
 
 import 'package:blood_pressure_app/components/dialoges/add_measurement_dialoge.dart';
 import 'package:blood_pressure_app/model/blood_pressure/model.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
 import 'package:blood_pressure_app/model/storage/intervall_store.dart';
 import 'package:blood_pressure_app/model/storage/settings_store.dart';
 import 'package:blood_pressure_app/screens/elements/blood_pressure_builder.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:health_data_store/health_data_store.dart' hide BloodPressureRecord;
+import 'package:health_data_store/health_data_store.dart';
 import 'package:intl/intl.dart';
 import 'package:provider/provider.dart';
 
@@ -82,9 +82,9 @@ class LegacyMeasurementsList extends StatelessWidget {
                       return Column(
                         children: [
                           Dismissible(
-                            key: Key(data[index].creationTime.toIso8601String()),
+                            key: Key(data[index].time.toIso8601String()),
                             confirmDismiss: (direction) async {
-                              final model = Provider.of<BloodPressureModel>(context, listen: false);
+                              final repo = RepositoryProvider.of<BloodPressureRepository>(context);
                               if (direction == DismissDirection.startToEnd) { // edit
                                 final model = Provider.of<BloodPressureModel>(context, listen: false);
                                 final entry = await showAddEntryDialoge(context,
@@ -94,9 +94,11 @@ class LegacyMeasurementsList extends StatelessWidget {
                                 );
                                 if (entry?.$1 != null) {
                                   if (context.mounted) {
-                                    model.addAndExport(context, entry!.$1!);
+                                    // TODO: reimplement
+                                    // repo.addAndExport(context, entry!.$1!);
+                                    throw UnimplementedError('addAndExport not supported');
                                   } else {
-                                    model.add(entry!.$1!);
+                                    unawaited(repo.add(entry!.$1!));
                                   }
                                 }
                                 assert(entry?.$2 == null);
@@ -115,7 +117,7 @@ class LegacyMeasurementsList extends StatelessWidget {
                                                 child: Text(AppLocalizations.of(context)!.btnCancel),),
                                             ElevatedButton(
                                                 onPressed: () {
-                                                  model.delete(data[index].creationTime);
+                                                  unawaited(repo.remove(data[index]));
 
                                                   dialogeDeletionConfirmed = true;
                                                   Navigator.pop(context, );
@@ -124,7 +126,7 @@ class LegacyMeasurementsList extends StatelessWidget {
                                           ],
                                         ),);
                                 } else {
-                                  model.delete(data[index].creationTime);
+                                  unawaited(repo.remove(data[index]));
                                   dialogeDeletionConfirmed = true;
                                 }
 
@@ -137,12 +139,16 @@ class LegacyMeasurementsList extends StatelessWidget {
                                     action: SnackBarAction(
                                       label: AppLocalizations.of(context)!.btnUndo,
                                       onPressed: () async {
+                                        // TODO: reimplement
+                                        /*
                                         model.addAndExport(context, BloodPressureRecord(
                                             data[index].creationTime,
                                             data[index].systolic,
                                             data[index].diastolic,
                                             data[index].pulse,
                                             data[index].notes,),);
+                                         */
+                                        throw UnimplementedError('addAndExport not supported');
                                       },
                                     ),
                                   ),);
@@ -172,19 +178,20 @@ class LegacyMeasurementsList extends StatelessWidget {
                                 ),
                                 Expanded(
                                     flex: _tableElementsSizes[0],
-                                    child: Text(formatter.format(data[index].creationTime)),),
+                                    child: Text(formatter.format(data[index].time)),),
                                 Expanded(
                                     flex: _tableElementsSizes[1],
-                                    child: Text((data[index].systolic ?? '').toString()),),
+                                    child: Text((data[index].sys ?? '').toString()),),
                                 Expanded(
                                     flex: _tableElementsSizes[2],
-                                    child: Text((data[index].diastolic ?? '').toString()),),
+                                    child: Text((data[index].dia ?? '').toString()),),
                                 Expanded(
                                     flex: _tableElementsSizes[3],
-                                    child: Text((data[index].pulse ?? '').toString()),),
-                                Expanded(
+                                    child: Text((data[index].pul ?? '').toString()),),
+                                // TODO: reimplement notes
+                                /*Expanded(
                                     flex: _tableElementsSizes[4],
-                                    child: Text(data[index].notes),),
+                                    child: Text(data[index].),),*/
                                 Expanded(
                                   flex: _sideFlex,
                                   child: const SizedBox(),
app/lib/screens/elements/measurement_graph.dart
@@ -1,7 +1,6 @@
 import 'dart:math';
 
 import 'package:blood_pressure_app/components/repository_builder.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
 import 'package:blood_pressure_app/model/horizontal_graph_line.dart';
 import 'package:blood_pressure_app/model/storage/intervall_store.dart';
 import 'package:blood_pressure_app/model/storage/settings_store.dart';
@@ -11,7 +10,7 @@ import 'package:collection/collection.dart';
 import 'package:fl_chart/fl_chart.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:health_data_store/health_data_store.dart' hide BloodPressureRecord;
+import 'package:health_data_store/health_data_store.dart';
 import 'package:intl/intl.dart';
 import 'package:provider/provider.dart';
 
@@ -38,7 +37,7 @@ class _LineChartState extends State<_LineChart> {
                 final List<MedicineIntake> intakes = intakesData.cast();
 
                 final List<BloodPressureRecord> data = records.toList();
-                data.sort((a, b) => a.creationTime.compareTo(b.creationTime));
+                data.sort((a, b) => a.time.compareTo(b.time));
 
                 // calculate lines for graph
                 final pulSpots = <FlSpot>[];
@@ -51,18 +50,18 @@ class _LineChartState extends State<_LineChart> {
                 /// Horizontally last value
                 double? graphEnd;
                 for (final e in data) {
-                  final x = e.creationTime.millisecondsSinceEpoch.toDouble();
-                  if (e.diastolic != null) {
-                    diaSpots.add(FlSpot(x, e.diastolic!.toDouble()));
-                    maxValue = max(maxValue, e.diastolic!);
+                  final x = e.time.millisecondsSinceEpoch.toDouble();
+                  if (e.dia != null) {
+                    diaSpots.add(FlSpot(x, e.dia!.mmHg.toDouble()));
+                    maxValue = max(maxValue, e.dia!.mmHg);
                   }
-                  if (e.systolic != null) {
-                    sysSpots.add(FlSpot(x, e.systolic!.toDouble()));
-                    maxValue = max(maxValue, e.systolic!);
+                  if (e.sys != null) {
+                    sysSpots.add(FlSpot(x, e.sys!.mmHg.toDouble()));
+                    maxValue = max(maxValue, e.sys!.mmHg);
                   }
-                  if (e.pulse != null) {
-                    pulSpots.add(FlSpot(x, e.pulse!.toDouble()));
-                    maxValue = max(maxValue, e.pulse!);
+                  if (e.pul != null) {
+                    pulSpots.add(FlSpot(x, e.pul!.mmHg.toDouble()));
+                    maxValue = max(maxValue, e.pul!.mmHg);
                   }
                   graphBegin ??= x;
                   graphEnd ??= x;
@@ -91,7 +90,7 @@ class _LineChartState extends State<_LineChart> {
                           maxX: graphEnd,
                           clipData: const FlClipData.all(),
                           titlesData: _buildFlTitlesData(settings,
-                              DateTimeRange(start: data.first.creationTime, end: data.last.creationTime),),
+                              DateTimeRange(start: data.first.time, end: data.last.time),),
                           lineTouchData: const LineTouchData(
                               touchTooltipData: LineTouchTooltipData(tooltipMargin: -200, tooltipRoundedRadius: 20),
                           ),
@@ -192,17 +191,18 @@ class _LineChartState extends State<_LineChart> {
 
   List<LineChartBarData> _buildNeedlePins(Iterable<BloodPressureRecord> allRecords, int min, int max, Settings settings,) {
     final pins = <LineChartBarData>[];
-    for (final r in allRecords.where((e) => e.needlePin != null)) {
+    // TODO: reimplement with health data store notes type
+    /*for (final r in allRecords.where((e) => e.needlePin != null)) {
       pins.add(LineChartBarData(
         spots: [
-          FlSpot(r.creationTime.millisecondsSinceEpoch.toDouble(), min.toDouble()),
-          FlSpot(r.creationTime.millisecondsSinceEpoch.toDouble(), max + 5),
+          FlSpot(r.time.millisecondsSinceEpoch.toDouble(), min.toDouble()),
+          FlSpot(r.time.millisecondsSinceEpoch.toDouble(), max + 5),
         ],
         barWidth: settings.needlePinBarWidth,
         dotData: const FlDotData(show: false),
         color: r.needlePin!.color.withAlpha(100),
       ),);
-    }
+    }*/
     return pins;
   }
 
@@ -257,7 +257,7 @@ class _LineChartState extends State<_LineChart> {
     );
 }
 
-// TODO: document
+// TODO: rewrite without fl_chart and simpler to maintain
 class MeasurementGraph extends StatelessWidget {
 
   const MeasurementGraph({super.key, this.height = 290});
app/lib/screens/home_screen.dart
@@ -1,3 +1,5 @@
+import 'dart:async';
+
 import 'package:blood_pressure_app/components/dialoges/add_measurement_dialoge.dart';
 import 'package:blood_pressure_app/components/measurement_list/measurement_list.dart';
 import 'package:blood_pressure_app/components/repository_builder.dart';
@@ -14,7 +16,7 @@ import 'package:flutter/scheduler.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:health_data_store/health_data_store.dart' show MedicineIntake, MedicineIntakeRepository, MedicineRepository;
+import 'package:health_data_store/health_data_store.dart' show BloodPressureRepository, MedicineIntake, MedicineIntakeRepository, MedicineRepository;
 import 'package:provider/provider.dart';
 
 /// Is true during the first [AppHome.build] before creating the widget.
@@ -33,7 +35,7 @@ class AppHome extends StatelessWidget {
     if (_appStart) {
       if (Provider.of<Settings>(context, listen: false).startWithAddMeasurementPage) {
         SchedulerBinding.instance.addPostFrameCallback((_) async {
-          final model = Provider.of<BloodPressureModel>(context, listen: false);
+          final repo = RepositoryProvider.of<BloodPressureRepository>(context);
           final intakes = RepositoryProvider.of<MedicineIntakeRepository>(context);
           final measurement = await showAddEntryDialoge(context,
             Provider.of<Settings>(context, listen: false),
@@ -42,13 +44,15 @@ class AppHome extends StatelessWidget {
           if (measurement == null) return;
           if (measurement.$1 != null) {
             if (context.mounted) {
-              model.addAndExport(context, measurement.$1!);
+              // TODO: reimplement
+              // model.addAndExport(context, measurement.$1!);
+              throw UnimplementedError('addAndExport not supported');
             } else {
-              model.add(measurement.$1!);
+              unawaited(repo.add(measurement.$1!));
             }
           }
           if (measurement.$2 != null) {
-            intakes.add(measurement.$2!);
+            unawaited(intakes.add(measurement.$2!));
           }
         });
       }