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 '../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<TaskEditPage> {
final formKey = GlobalKey<FormState>(debugLabel: 'taskEditFormKey');
bool didFormChange = false;
bool isDueTimeEnabled = false;
final List<CreateAlarmRequest> alarms = [];
final List<CreateAlarmRequest> alarmRequests = [];
@override
void didChangeDependencies() {
@@ -56,6 +60,18 @@ class _TaskEditPageState extends State<TaskEditPage> {
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<TaskEditPage> {
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<TaskEditPage> {
category: categoryController.text,
subtasks: [],
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) {
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(() {});
}
@@ -26,11 +26,19 @@ class _FixedTimeAlarmFormState extends State<FixedTimeAlarmForm> {
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