Commit 592bc1c

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-12-29 14:57:19
show intakes on home screen
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent d6301bf
lib/components/measurement_list/intake_list_entry.dart
@@ -0,0 +1,27 @@
+import 'package:blood_pressure_app/model/blood_pressure/medicine/medicine_intake.dart';
+import 'package:blood_pressure_app/model/storage/settings_store.dart';
+import 'package:flutter/material.dart';
+import 'package:intl/intl.dart';
+
+/// Medicine intake to display in a list.
+class IntakeListEntry extends StatelessWidget {
+  const IntakeListEntry({super.key,
+    required this.settings,
+    required this.intake,
+  });
+
+  final Settings settings;
+
+  final MedicineIntake intake;
+
+  @override
+  Widget build(BuildContext context) => ListTile(
+    title: Text(intake.medicine.designation),
+    subtitle: Text(DateFormat(settings.dateFormatString).format(intake.timestamp)),
+    trailing: Text(intake.dosis.toString()),
+    leading: const Icon(Icons.medication),
+    iconColor: intake.medicine.color,
+  );
+
+
+}
\ No newline at end of file
lib/components/measurement_list/measurement_list.dart
@@ -1,18 +1,42 @@
+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/medicine/medicine_intake.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_gen/gen_l10n/app_localizations.dart';
 
 class MeasurementList extends StatelessWidget {
-  const MeasurementList({super.key, required this.settings, required this.records});
+  const MeasurementList({super.key,
+    required this.settings,
+    required this.records,
+    required this.intakes,
+  });
 
   final Settings settings;
+
+  /// Records to display.
   final List<BloodPressureRecord> records;
 
+  /// Medicine intakes to list.
+  ///
+  /// Will get merged with blood pressure records.
+  final List<MedicineIntake> intakes;
+
   @override
   Widget build(BuildContext context) {
     final localizations = AppLocalizations.of(context)!;
+    final entries = [];
+    entries.addAll(records);
+    entries.addAll(intakes);
+    entries.sort((e1, e2) {
+      if (e2 is BloodPressureRecord && e1 is BloodPressureRecord) return e2.creationTime.compareTo(e1.creationTime);
+      if (e2 is BloodPressureRecord && e1 is MedicineIntake) return e2.creationTime.compareTo(e1.timestamp);
+      if (e2 is MedicineIntake && e1 is BloodPressureRecord) return e2.timestamp.compareTo(e1.creationTime);
+      if (e2 is MedicineIntake && e1 is MedicineIntake) return e2.timestamp.compareTo(e1.timestamp);
+      assert(false);
+      return 0;
+    });
     return Column(
       mainAxisSize: MainAxisSize.min,
       children: [
@@ -58,12 +82,21 @@ class MeasurementList extends StatelessWidget {
             // Fix actions blocked by floating buttons on different screens
             // and font sizes by adding empty offset to bottom.
             padding: const EdgeInsets.only(bottom: 300),
-            itemCount: records.length,
+            itemCount: entries.length,
             itemBuilder: (context, idx) {
-              return MeasurementListRow(
-                record: records[idx],
-                settings: settings,
-              );
+              if (entries[idx] is BloodPressureRecord) {
+                return MeasurementListRow(
+                  record: entries[idx],
+                  settings: settings,
+                );
+              } else {
+                assert(entries[idx] is MedicineIntake);
+                return IntakeListEntry(
+                  intake: entries[idx],
+                  settings: settings,
+                );
+              }
+
             },
           ),
         )
lib/components/measurement_list/measurement_list_entry.dart
@@ -8,6 +8,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 import 'package:intl/intl.dart';
 import 'package:provider/provider.dart';
 
+/// Blood pressure measurement to display in a list.
 class MeasurementListRow extends StatelessWidget {
   const MeasurementListRow({super.key, required this.record, required this.settings});
 
lib/components/consistent_future_builder.dart
@@ -50,7 +50,7 @@ class _ConsistentFutureBuilderState<T> extends State<ConsistentFutureBuilder<T>>
       future: _future ?? widget.future,
       builder: (BuildContext context, AsyncSnapshot<T> snapshot) {
         if (snapshot.hasError) {
-          return Text(AppLocalizations.of(context)!.error(snapshot.error.toString()));
+          return Text(AppLocalizations.of(context)?.error(snapshot.error.toString()) ?? snapshot.error.toString());
         }
         switch (snapshot.connectionState) {
           case ConnectionState.none:
lib/screens/home_screen.dart
@@ -59,9 +59,10 @@ class AppHome extends StatelessWidget {
         return Center(
           child: Padding(
             padding: const EdgeInsets.only(top: 20),
-            child: Consumer<Settings>(
-              builder: (context, settings, child) {
-                return Column(children: [
+            child: Consumer<IntakeHistory>(builder: (context, intakeHistory, child) =>
+              Consumer<IntervallStoreManager>(builder: (context, intervalls, child) =>
+              Consumer<Settings>(builder: (context, settings, child) =>
+                Column(children: [
                   const MeasurementGraph(),
                   Expanded(
                     child: (settings.useLegacyList) ?
@@ -71,11 +72,12 @@ class AppHome extends StatelessWidget {
                         onData: (context, records) => MeasurementList(
                           settings: settings,
                           records: records,
+                          intakes: intakeHistory.getIntakes(intervalls.mainPage.currentRange),
                         )
                       )
                   )
-                ]);
-              }
+                ])
+              ))
             ),
           ),
         );
lib/main.dart
@@ -56,7 +56,7 @@ Future<Widget> _loadApp() async {
       intakeHistory = IntakeHistory([]);
     }
   } catch (e) {
-    assert(false, e.toString());
+    assert(e is PathNotFoundException, e.toString());
     intakeHistory = IntakeHistory([]);
   }
   intakeHistory.addListener(() async {