handled saving and restoring fixed time alarms

This commit is contained in:
2026-07-20 14:30:41 +02:00
parent cd97dada2a
commit e6951b4c25
2 changed files with 45 additions and 10 deletions
+35 -8
View File
@@ -2,9 +2,13 @@ import 'package:flutter/material.dart';
import '../app_theme.dart'; import '../app_theme.dart';
import '../model/alarm/alarm.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_alarm_request.dart';
import '../model/requests/create_fixed_time_alarm_request.dart'; import '../model/requests/create_fixed_time_alarm_request.dart';
import '../model/requests/create_location_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/requests/create_task_request.dart';
import '../model/extensions/controller_context.dart'; import '../model/extensions/controller_context.dart';
import '../model/task.dart'; import '../model/task.dart';
@@ -37,7 +41,7 @@ class _TaskEditPageState extends State<TaskEditPage> {
final formKey = GlobalKey<FormState>(debugLabel: 'taskEditFormKey'); final formKey = GlobalKey<FormState>(debugLabel: 'taskEditFormKey');
bool didFormChange = false; bool didFormChange = false;
bool isDueTimeEnabled = false; bool isDueTimeEnabled = false;
final List<CreateAlarmRequest> alarms = []; final List<CreateAlarmRequest> alarmRequests = [];
@override @override
void didChangeDependencies() { void didChangeDependencies() {
@@ -56,6 +60,18 @@ class _TaskEditPageState extends State<TaskEditPage> {
isDueTimeEnabled = true; isDueTimeEnabled = true;
} }
isInitialized = 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; pageTitle = task!.title;
} }
} }
@@ -151,12 +167,12 @@ class _TaskEditPageState extends State<TaskEditPage> {
label: Text('Location'), label: Text('Location'),
icon: Icon(Icons.location_on), icon: Icon(Icons.location_on),
), ),
for (final (index, alarm) in alarms.indexed) for (final (index, alarmRequest) in alarmRequests.indexed)
AlarmForm( AlarmForm(
request: alarm, request: alarmRequest,
onChanged: (updated) { onChanged: (updated) {
setState(() { setState(() {
alarms[index] = updated; alarmRequests[index] = updated;
}); });
}, },
), ),
@@ -187,7 +203,18 @@ class _TaskEditPageState extends State<TaskEditPage> {
category: categoryController.text, category: categoryController.text,
subtasks: [], subtasks: [],
url: urlController.text, url: urlController.text,
alarms: [], alarms: alarmRequests.map<Alarm>((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<TaskEditPage> {
void onAddAlarmPressed(AlarmType alarmType) { void onAddAlarmPressed(AlarmType alarmType) {
switch (alarmType) { switch (alarmType) {
case AlarmType.location: case AlarmType.location:
alarms.add(CreateLocationAlarmRequest()); alarmRequests.add(CreateLocationAlarmRequest());
case AlarmType.timeFixed: case AlarmType.timeFixed:
alarms.add(CreateFixedTimeAlarmRequest()); alarmRequests.add(CreateFixedTimeAlarmRequest());
case AlarmType.timeRelative: case AlarmType.timeRelative:
alarms.add(CreateFixedTimeAlarmRequest()); alarmRequests.add(CreateFixedTimeAlarmRequest());
} }
setState(() {}); setState(() {});
} }
@@ -26,11 +26,19 @@ class _FixedTimeAlarmFormState extends State<FixedTimeAlarmForm> {
bool isDueTimeEnabled = false; bool isDueTimeEnabled = false;
@override @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); dueDateController.addListener(onDueDateChanged);
dueTimeController.addListener(onDueTimeChanged); dueTimeController.addListener(onDueTimeChanged);
super.initState(); super.didChangeDependencies();
} }
@override @override