Commit 30122be
Changed files (3)
lib
components
lib/components/measurement_list/intake_list_entry.dart
@@ -1,24 +1,52 @@
+import 'dart:async';
+
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';
+import 'measurement_list_entry.dart';
+
/// Medicine intake to display in a list.
class IntakeListEntry extends StatelessWidget {
const IntakeListEntry({super.key,
required this.settings,
required this.intake,
+ this.delete,
});
final Settings settings;
final MedicineIntake intake;
+ /// Function to delete this intake.
+ ///
+ /// Gets called after the delete button has been pressed and the deletion got
+ /// confirmed.
+ /// When null no deletion button is displayed.
+ final FutureOr<void> Function()? delete;
+
@override
Widget build(BuildContext context) => ListTile(
title: Text(intake.medicine.designation),
subtitle: Text(DateFormat(settings.dateFormatString).format(intake.timestamp)),
- trailing: Text(intake.dosis.toString()),
+ trailing: Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Text(intake.dosis.toString()),
+ if (delete != null)
+ IconButton(
+ onPressed: () async {
+ bool confirmedDeletion = true;
+ if (settings.confirmDeletion) {
+ confirmedDeletion = await showConfirmDeletionDialoge(context);
+ }
+ if (confirmedDeletion) delete!();
+ },
+ icon: const Icon(Icons.delete)
+ ), // TODO: show in graph
+ ],
+ ),
leading: const Icon(Icons.medication),
iconColor: intake.medicine.color,
);
lib/components/measurement_list/measurement_list.dart
@@ -1,10 +1,12 @@
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/intake_history.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';
+import 'package:provider/provider.dart';
class MeasurementList extends StatelessWidget {
const MeasurementList({super.key,
@@ -94,6 +96,11 @@ class MeasurementList extends StatelessWidget {
return IntakeListEntry(
intake: entries[idx],
settings: settings,
+ delete: () {
+ // TODO: move out of model
+ final history = Provider.of<IntakeHistory>(context, listen: false);
+ history.deleteIntake(entries[idx]);
+ },
);
}
lib/components/measurement_list/measurement_list_entry.dart
@@ -88,27 +88,12 @@ class MeasurementListRow extends StatelessWidget {
void _deleteEntry(Settings settings, BuildContext context, AppLocalizations localizations) async {
final model = Provider.of<BloodPressureModel>(context, listen: false);
final messanger = ScaffoldMessenger.of(context);
- bool confirmedDeletion = false;
+ bool confirmedDeletion = true;
if (settings.confirmDeletion) {
- confirmedDeletion = await showDialog<bool>(context: context,
- builder: (context) => AlertDialog(
- title: Text(AppLocalizations.of(context)!.confirmDelete),
- content: Text(AppLocalizations.of(context)!.confirmDeleteDesc),
- actions: [
- ElevatedButton(
- onPressed: () => Navigator.of(context).pop(false),
- child: Text(AppLocalizations.of(context)!.btnCancel)),
- ElevatedButton(
- onPressed: () => Navigator.of(context).pop(true),
- child: Text(AppLocalizations.of(context)!.btnConfirm)),
- ],
- )
- ) ?? false;
- } else {
- confirmedDeletion = true;
+ confirmedDeletion = await showConfirmDeletionDialoge(context);
}
- if (confirmedDeletion) {
+ if (confirmedDeletion) { // TODO: move out of model
model.delete(record.creationTime);
messanger.removeCurrentSnackBar();
messanger.showSnackBar(SnackBar(
@@ -122,3 +107,22 @@ class MeasurementListRow extends StatelessWidget {
}
}
}
+
+Future<bool> showConfirmDeletionDialoge(BuildContext context) async {
+ return await showDialog<bool>(context: context,
+ builder: (context) => AlertDialog(
+ title: Text(AppLocalizations.of(context)!.confirmDelete),
+ content: Text(AppLocalizations.of(context)!.confirmDeleteDesc),
+ actions: [
+ ElevatedButton(
+ onPressed: () => Navigator.of(context).pop(false),
+ child: Text(AppLocalizations.of(context)!.btnCancel)
+ ),
+ ElevatedButton(
+ onPressed: () => Navigator.of(context).pop(true),
+ child: Text(AppLocalizations.of(context)!.btnConfirm)
+ ),
+ ],
+ )
+ ) ?? false;
+}