Commit 2449360

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-04-08 18:11:56
fix graph building (24 failing)
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 46287d5
Changed files (4)
app
lib
components
screens
test
app/lib/components/dialoges/add_measurement_dialoge.dart
@@ -1,3 +1,4 @@
+import 'dart:async';
 import 'dart:math';
 
 import 'package:blood_pressure_app/components/date_time_picker.dart';
@@ -109,8 +110,8 @@ class _AddEntryDialogeState extends State<AddEntryDialoge> {
       _measurementFormActive = true;
     }
 
-    widget.medRepo.getAll()
-        .then((value) => setState(() => availableMeds.addAll(value)));
+    unawaited(widget.medRepo.getAll()
+        .then((value) => setState(() => availableMeds.addAll(value))));
 
     sysFocusNode.requestFocus();
     ServicesBinding.instance.keyboard.addHandler(_onKey);
app/lib/screens/elements/measurement_graph.dart
@@ -1,7 +1,6 @@
 import 'dart:math';
 
-import 'package:blood_pressure_app/model/blood_pressure/medicine/intake_history.dart';
-import 'package:blood_pressure_app/model/blood_pressure/medicine/medicine_intake.dart';
+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';
@@ -12,6 +11,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:intl/intl.dart';
 import 'package:provider/provider.dart';
 
@@ -28,11 +28,15 @@ class _LineChartState extends State<_LineChart> {
   @override
   Widget build(BuildContext context) => SizedBox(
         height: widget.height,
-        child: Consumer<IntakeHistory>(
-          builder: (context, intakeHistory, child) => Consumer<Settings>(
+        child: RepositoryBuilder<MedicineIntake, MedicineIntakeRepository>(
+          rangeType: IntervallStoreManagerLocation.mainPage,
+          onData: (context, List<dynamic> intakesData) => Consumer<Settings>(
           builder: (context, settings, child) => BloodPressureBuilder(
               rangeType: IntervallStoreManagerLocation.mainPage,
               onData: (BuildContext context, UnmodifiableListView<BloodPressureRecord> records) {
+                // TODO: Figure out why type safety isn't possible. (see home_screen for more info)
+                final List<MedicineIntake> intakes = intakesData.cast();
+
                 final List<BloodPressureRecord> data = records.toList();
                 data.sort((a, b) => a.creationTime.compareTo(b.creationTime));
 
@@ -93,12 +97,7 @@ class _LineChartState extends State<_LineChart> {
                           ),
                           lineBarsData: buildBars(animatedThickness, settings, sysSpots, diaSpots, pulSpots,
                               maxValue, minValue, graphBegin, graphEnd, records,
-                              intakeHistory.getIntakes(
-                                  DateTimeRange(
-                                      start: DateTime.fromMillisecondsSinceEpoch(graphBegin!.toInt()),
-                                      end: DateTime.fromMillisecondsSinceEpoch(graphEnd!.toInt()),
-                                  ),
-                              ),
+                              intakes,
                           ),
                       ),
                     ),
@@ -122,7 +121,7 @@ class _LineChartState extends State<_LineChart> {
       /// Horizontally furthest value (same as last timestamp).
       double? graphEnd, 
       Iterable<BloodPressureRecord> allRecords,
-      Iterable<OldMedicineIntake> allIntakes,
+      Iterable<MedicineIntake> allIntakes,
       ) {
     final bars = [
       _buildBarData(animatedThickness, sysSpots, settings.sysColor, true, settings.sysWarn.toDouble()),
@@ -143,13 +142,13 @@ class _LineChartState extends State<_LineChart> {
     for (final intake in allIntakes) {
       bars.add(LineChartBarData(
         spots: [
-          FlSpot(intake.timestamp.millisecondsSinceEpoch.toDouble(), minValue.toDouble()),
-          FlSpot(intake.timestamp.millisecondsSinceEpoch.toDouble(), maxValue + 5),
+          FlSpot(intake.time.millisecondsSinceEpoch.toDouble(), minValue.toDouble()),
+          FlSpot(intake.time.millisecondsSinceEpoch.toDouble(), maxValue + 5),
         ],
         barWidth: settings.needlePinBarWidth,
         dotData: const FlDotData(show: false),
         dashArray: [8,7],
-        color: intake.medicine.color,
+        color: intake.medicine.color == null ? null : Color(intake.medicine.color!),
       ),);
     }
     return bars;
@@ -279,6 +278,6 @@ class MeasurementGraph extends StatelessWidget {
     );
 }
 
-extension Sum<T> on List<T> {
+extension _Sum<T> on List<T> {
   double sum(num Function(T value) f) => fold<double>(0, (prev, e) => prev + f(e).toDouble());
 }
app/test/ui/components/util.dart
@@ -53,15 +53,16 @@ Future<Widget> appBase(Widget child, {
     ));
   }
 
-  return newAppBase(child,
-    settings: settings,
-    exportSettings: exportSettings,
-    csvExportSettings: csvExportSettings,
-    pdfExportSettings: pdfExportSettings,
-    intervallStoreManager: intervallStoreManager,
-    medRepo: medRepo,
-    intakeRepo: intakeRepo,
-  );
+  return Provider(create: (_) => model,
+    child: await newAppBase(child,
+      settings: settings,
+      exportSettings: exportSettings,
+      csvExportSettings: csvExportSettings,
+      pdfExportSettings: pdfExportSettings,
+      intervallStoreManager: intervallStoreManager,
+      medRepo: medRepo,
+      intakeRepo: intakeRepo,
+  ),);
 
   // TODO: bpRepo
 }
@@ -160,6 +161,7 @@ Medicine mockMedicine({
 /// Don't use this, use [_getHealthDateStore] to obtain.
 HealthDataStore? _db;
 Future<HealthDataStore> _getHealthDateStore() async {
+  TestWidgetsFlutterBinding.ensureInitialized();
   _db ??= await HealthDataStore.load(await databaseFactoryFfi.openDatabase(inMemoryDatabasePath));
   return _db!;
 }
app/test/ui/navigation_test.dart
@@ -13,6 +13,7 @@ import 'package:blood_pressure_app/model/storage/settings_store.dart';
 import 'package:blood_pressure_app/screens/settings_screen.dart';
 import 'package:blood_pressure_app/screens/statistics_screen.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 import 'package:flutter_test/flutter_test.dart';
 
 import 'components/util.dart';
@@ -26,7 +27,7 @@ void main() {
       await tester.pumpAndSettle();
 
       expect(find.byType(AddEntryDialoge), findsOneWidget);
-    }, timeout: const Timeout(Duration(seconds: 10)),);
+    }, timeout: const Timeout(Duration(seconds: 4)),);
     testWidgets('should navigate to settings page', (tester) async {
       await _pumpAppRoot(tester);
       expect(find.byIcon(Icons.settings), findsOneWidget);
@@ -53,13 +54,14 @@ void main() {
 
       expect(find.byType(SettingsPage), findsOneWidget);
       expect(find.byType(EnterTimeFormatDialoge), findsNothing);
-      expect(find.byKey(const Key('EnterTimeFormatScreen')), findsOneWidget);
-      await tester.tap(find.byKey(const Key('EnterTimeFormatScreen')));
+      final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+      expect(find.text(localizations.enterTimeFormatScreen), findsOneWidget);
+      await tester.tap(find.text(localizations.enterTimeFormatScreen));
       await tester.pumpAndSettle();
 
       expect(find.byType(EnterTimeFormatDialoge), findsOneWidget);
     });
-    // ...
+    // TODO: ...
   });
 }