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