diff --git a/lib/pages/task_edit_page.dart b/lib/pages/task_edit_page.dart index 7e06501..865cf32 100644 --- a/lib/pages/task_edit_page.dart +++ b/lib/pages/task_edit_page.dart @@ -25,6 +25,9 @@ class _TaskEditPageState extends State { final dueDateController = TextEditingController(); final dueTimeController = TextEditingController(); late String pageTitle; + final dueDateFocusNode = FocusNode(); + final dueTimeFocusNode = FocusNode(); + final categoryFocusNode = FocusNode(); @override void didChangeDependencies() { @@ -80,16 +83,15 @@ class _TaskEditPageState extends State { TextFormField( controller: descriptionController, decoration: InputDecoration(label: Text('Description')), - keyboardType: TextInputType.text, - textInputAction: TextInputAction.next, + keyboardType: TextInputType.multiline, + textInputAction: TextInputAction.newline, + minLines: 3, + maxLines: 10, ), TextFormField( + focusNode: dueDateFocusNode, controller: dueDateController, - onChanged: (value) { - if (dateTimeValidator(value) == null) {} - - setState(() {}); - }, + onFieldSubmitted: (_) => dueDateFocusNode.nextFocus(), decoration: InputDecoration( label: Text('Due Date'), suffix: IconButton( @@ -97,17 +99,19 @@ class _TaskEditPageState extends State { final result = await onOpenCalendarPickerPressed(); if (result != null) { dueDateController.text = getIsoDateString(result); + dueTimeFocusNode.requestFocus(); } - setState(() {}); }, icon: Icon(Icons.calendar_month), ), ), validator: dateTimeValidator, - keyboardType: TextInputType.text, + keyboardType: TextInputType.datetime, textInputAction: TextInputAction.next, ), TextFormField( + focusNode: dueTimeFocusNode, + onFieldSubmitted: (_) => dueTimeFocusNode.nextFocus(), controller: dueTimeController, enabled: DateTime.tryParse(dueDateController.text) != null ? true @@ -117,10 +121,9 @@ class _TaskEditPageState extends State { suffix: IconButton( onPressed: () async { final result = await onOpenTimePickerPressed(); - if (result != null) { - setState(() { - dueTimeController.text = result.format(context); - }); + if (result != null && context.mounted) { + dueTimeController.text = result.format(context); + categoryFocusNode.requestFocus(); } }, icon: Icon(Icons.schedule), @@ -131,6 +134,7 @@ class _TaskEditPageState extends State { textInputAction: TextInputAction.next, ), TextFormField( + focusNode: categoryFocusNode, controller: categoryController, decoration: InputDecoration(label: Text('Category')), keyboardType: TextInputType.text,