From e6951b4c25adbe02969f5f1d85c249712141a9ae Mon Sep 17 00:00:00 2001 From: marco Date: Mon, 20 Jul 2026 14:30:41 +0200 Subject: [PATCH] handled saving and restoring fixed time alarms --- lib/pages/task_edit_page.dart | 43 +++++++++++++++---- .../alarm_widgets/fixed_time_alarm_form.dart | 12 +++++- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/lib/pages/task_edit_page.dart b/lib/pages/task_edit_page.dart index 4ece1bf..95419f7 100644 --- a/lib/pages/task_edit_page.dart +++ b/lib/pages/task_edit_page.dart @@ -2,9 +2,13 @@ import 'package:flutter/material.dart'; import '../app_theme.dart'; import '../model/alarm/alarm.dart'; +import '../model/alarm/fixed_time_alarm.dart'; +import '../model/alarm/location_alarm.dart'; +import '../model/alarm/relative_time_alarm.dart'; import '../model/requests/create_alarm_request.dart'; import '../model/requests/create_fixed_time_alarm_request.dart'; import '../model/requests/create_location_alarm_request.dart'; +import '../model/requests/create_relative_time_alarm_request.dart'; import '../model/requests/create_task_request.dart'; import '../model/extensions/controller_context.dart'; import '../model/task.dart'; @@ -37,7 +41,7 @@ class _TaskEditPageState extends State { final formKey = GlobalKey(debugLabel: 'taskEditFormKey'); bool didFormChange = false; bool isDueTimeEnabled = false; - final List alarms = []; + final List alarmRequests = []; @override void didChangeDependencies() { @@ -56,6 +60,18 @@ class _TaskEditPageState extends State { isDueTimeEnabled = true; } isInitialized = true; + alarmRequests.addAll( + task!.alarms.map((alarm) { + if (alarm is FixedTimeAlarm) { + return CreateFixedTimeAlarmRequest.fromAlarm(alarm); + } else if (alarm is RelativeTimeAlarm) { + return CreateRelativeTimeAlarmRequest.fromAlarm(alarm); + } else if (alarm is LocationAlarm) { + return CreateLocationAlarmRequest.fromAlarm(alarm); + } + throw TypeError(); + }), + ); pageTitle = task!.title; } } @@ -151,12 +167,12 @@ class _TaskEditPageState extends State { label: Text('Location'), icon: Icon(Icons.location_on), ), - for (final (index, alarm) in alarms.indexed) + for (final (index, alarmRequest) in alarmRequests.indexed) AlarmForm( - request: alarm, + request: alarmRequest, onChanged: (updated) { setState(() { - alarms[index] = updated; + alarmRequests[index] = updated; }); }, ), @@ -187,7 +203,18 @@ class _TaskEditPageState extends State { category: categoryController.text, subtasks: [], url: urlController.text, - alarms: [], + alarms: alarmRequests.map((e) { + if (e is CreateFixedTimeAlarmRequest) { + return e.toAlarm(generateId()); + } + if (e is CreateRelativeTimeAlarmRequest) { + return e.toAlarm(generateId()); + } + if (e is LocationAlarm) { + return e.toAlarm(generateId()); + } + throw TypeError(); + }).toList(), ), ); } @@ -223,12 +250,12 @@ class _TaskEditPageState extends State { void onAddAlarmPressed(AlarmType alarmType) { switch (alarmType) { case AlarmType.location: - alarms.add(CreateLocationAlarmRequest()); + alarmRequests.add(CreateLocationAlarmRequest()); case AlarmType.timeFixed: - alarms.add(CreateFixedTimeAlarmRequest()); + alarmRequests.add(CreateFixedTimeAlarmRequest()); case AlarmType.timeRelative: - alarms.add(CreateFixedTimeAlarmRequest()); + alarmRequests.add(CreateFixedTimeAlarmRequest()); } setState(() {}); } diff --git a/lib/widgets/alarm_widgets/fixed_time_alarm_form.dart b/lib/widgets/alarm_widgets/fixed_time_alarm_form.dart index f674e4b..6fadce6 100644 --- a/lib/widgets/alarm_widgets/fixed_time_alarm_form.dart +++ b/lib/widgets/alarm_widgets/fixed_time_alarm_form.dart @@ -26,11 +26,19 @@ class _FixedTimeAlarmFormState extends State { bool isDueTimeEnabled = false; @override - void initState() { + void didChangeDependencies() { + if (widget.request.triggerAt != null) { + dueDateController.text = getIsoDateString(widget.request.triggerAt!); + dueTimeController.text = TimeOfDay.fromDateTime( + widget.request.triggerAt!, + ).format(context); + isDueTimeEnabled = true; + } + dueDateController.addListener(onDueDateChanged); dueTimeController.addListener(onDueTimeChanged); - super.initState(); + super.didChangeDependencies(); } @override