3 Commits
Author SHA1 Message Date
marco 2c3e52ba53 added spacing at the end of the form and delete button for alarms 2026-07-20 14:52:16 +02:00
marco 62af007799 validate form before saving 2026-07-20 14:40:29 +02:00
marco 8f3afc3bd7 added not empty validator 2026-07-20 14:40:17 +02:00
2 changed files with 50 additions and 33 deletions
+47 -32
View File
@@ -168,14 +168,27 @@ class _TaskEditPageState extends State<TaskEditPage> {
icon: Icon(Icons.location_on),
),
for (final (index, alarmRequest) in alarmRequests.indexed)
AlarmForm(
request: alarmRequest,
onChanged: (updated) {
setState(() {
alarmRequests[index] = updated;
});
},
Row(
children: [
Expanded(
child: AlarmForm(
request: alarmRequest,
onChanged: (updated) {
setState(() {
alarmRequests[index] = updated;
});
},
),
),
IconButton(
onPressed: () => setState(() {
alarmRequests.removeAt(index);
}),
icon: Icon(Icons.close),
),
],
),
SizedBox(height: 120),
],
),
],
@@ -191,32 +204,34 @@ class _TaskEditPageState extends State<TaskEditPage> {
}
void onSavePressed() {
Navigator.of(context).pop(
CreateTaskRequest(
title: titleController.text,
description: descriptionController.text,
start: null,
due: DateTime.tryParse(
'${dueDateController.text} ${dueTimeController.text}'.trim(),
if (formKey.currentState!.validate()) {
Navigator.of(context).pop(
CreateTaskRequest(
title: titleController.text,
description: descriptionController.text,
start: null,
due: DateTime.tryParse(
'${dueDateController.text} ${dueTimeController.text}'.trim(),
),
isCompleted: false,
category: categoryController.text,
subtasks: [],
url: urlController.text,
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(),
),
isCompleted: false,
category: categoryController.text,
subtasks: [],
url: urlController.text,
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(),
),
);
);
}
}
void onPopInvoked(bool didPop, Object? result) {
@@ -69,7 +69,9 @@ class _FixedTimeAlarmFormState extends State<FixedTimeAlarmForm> {
icon: Icon(Icons.calendar_month),
),
),
validator: dateTimeValidator,
validator: (value) {
return notEmptyValidator(value) ?? dateTimeValidator(value);
},
keyboardType: TextInputType.datetime,
textInputAction: TextInputAction.next,
),