improved ux

This commit is contained in:
2026-06-17 14:33:54 +02:00
parent ff3d4f61a7
commit 18ce2d9ccf
+64 -49
View File
@@ -96,56 +96,69 @@ class _TaskEditPageState extends State<TaskEditPage> {
minLines: 3,
maxLines: 10,
),
TextFormField(
focusNode: dueDateFocusNode,
controller: dueDateController,
onChanged: maybeEnableDueTime,
onFieldSubmitted: (_) {
isDueTimeEnabled
? dueDateFocusNode.nextFocus()
: categoryFocusNode.requestFocus();
},
decoration: InputDecoration(
label: Text('Due Date'),
suffix: IconButton(
onPressed: () async {
final result = await onOpenCalendarPickerPressed();
if (result != null) {
final dateString = getIsoDateString(result);
dueDateController.text = dateString;
maybeEnableDueTime(dateString);
formKey.currentState?.validate();
dueTimeFocusNode.requestFocus();
}
},
icon: Icon(Icons.calendar_month),
Flex(
direction: Axis.horizontal,
children: [
Flexible(
flex: 3,
child: TextFormField(
focusNode: dueDateFocusNode,
controller: dueDateController,
onChanged: maybeEnableDueTime,
onFieldSubmitted: (_) {
isDueTimeEnabled
? dueDateFocusNode.nextFocus()
: categoryFocusNode.requestFocus();
},
decoration: InputDecoration(
label: Text('Due Date'),
suffixIcon: IconButton(
onPressed: () async {
final result = await onOpenCalendarPickerPressed();
if (result != null) {
final dateString = getIsoDateString(result);
dueDateController.text = dateString;
maybeEnableDueTime(dateString);
formKey.currentState?.validate();
dueTimeFocusNode.requestFocus();
}
},
icon: Icon(Icons.calendar_month),
),
),
validator: dateTimeValidator,
keyboardType: TextInputType.datetime,
textInputAction: TextInputAction.next,
),
),
),
validator: dateTimeValidator,
keyboardType: TextInputType.datetime,
textInputAction: TextInputAction.next,
),
TextFormField(
focusNode: dueTimeFocusNode,
onFieldSubmitted: (_) => dueTimeFocusNode.nextFocus(),
controller: dueTimeController,
enabled: isDueTimeEnabled,
decoration: InputDecoration(
label: Text('Due Time'),
suffix: IconButton(
onPressed: () async {
final result = await onOpenTimePickerPressed();
if (result != null && context.mounted) {
dueTimeController.text = result.format(context);
categoryFocusNode.requestFocus();
}
},
icon: Icon(Icons.schedule),
Padding(padding: EdgeInsetsGeometry.only(left: 10)),
Flexible(
flex: 2,
child: TextFormField(
focusNode: dueTimeFocusNode,
onFieldSubmitted: (_) => dueTimeFocusNode.nextFocus(),
controller: dueTimeController,
enabled: isDueTimeEnabled,
decoration: InputDecoration(
label: Text('Due Time'),
suffixIcon: IconButton(
onPressed: () async {
final result = await onOpenTimePickerPressed();
if (result != null && context.mounted) {
dueTimeController.text = result.format(context);
categoryFocusNode.requestFocus();
}
},
icon: Icon(Icons.schedule),
),
),
validator: timeValidator,
keyboardType: TextInputType.text,
textInputAction: TextInputAction.next,
),
),
),
validator: timeValidator,
keyboardType: TextInputType.text,
textInputAction: TextInputAction.next,
],
),
TextFormField(
focusNode: categoryFocusNode,
@@ -198,7 +211,9 @@ class _TaskEditPageState extends State<TaskEditPage> {
title: titleController.text,
description: descriptionController.text,
start: null,
due: null,
due: DateTime.tryParse(
'${dueDateController.text} ${dueTimeController.text}'.trim(),
),
isCompleted: false,
category: categoryController.text,
subtasks: [],