From e9f31ea0f87f00e35d6c0b9d4351336a736b20fd Mon Sep 17 00:00:00 2001 From: Richard Shiue <71320345+richardshiue@users.noreply.github.com> Date: Tue, 22 Aug 2023 22:38:07 +0800 Subject: [PATCH] fix: arrow keys on field name text field (#3162) --- .../widgets/header/field_editor.dart | 48 ++++++++----------- .../lib/style_widget/text_field.dart | 10 ++-- 2 files changed, 23 insertions(+), 35 deletions(-) diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_editor.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_editor.dart index 5c1be5911c..57cca6acba 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_editor.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/widgets/header/field_editor.dart @@ -2,7 +2,6 @@ import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/plugins/database_view/application/field/field_editor_bloc.dart'; import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart'; import 'package:appflowy_popover/appflowy_popover.dart'; -import 'package:dartz/dartz.dart' show none; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra_ui/style_widget/button.dart'; @@ -164,6 +163,8 @@ class _FieldNameTextFieldState extends State { @override void initState() { + super.initState(); + focusNode.addListener(() { if (focusNode.hasFocus) { widget.popoverMutex.close(); @@ -175,39 +176,28 @@ class _FieldNameTextFieldState extends State { focusNode.unfocus(); } }); - - super.initState(); } @override Widget build(BuildContext context) { - return BlocListener( - listenWhen: (p, c) => p.field == none(), - listener: (context, state) { - textController.text = state.name; - focusNode.requestFocus(); + return BlocBuilder( + builder: (context, state) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 12.0), + child: FlowyTextField( + focusNode: focusNode, + controller: textController, + onSubmitted: (String _) => PopoverContainer.of(context).close(), + text: state.name, + errorText: state.errorText.isEmpty ? null : state.errorText, + onChanged: (newName) { + context + .read() + .add(FieldEditorEvent.updateName(newName)); + }, + ), + ); }, - child: BlocBuilder( - buildWhen: (previous, current) => - previous.errorText != current.errorText, - builder: (context, state) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 12.0), - child: FlowyTextField( - focusNode: focusNode, - controller: textController, - onSubmitted: (String _) => PopoverContainer.of(context).close(), - text: state.name, - errorText: state.errorText.isEmpty ? null : state.errorText, - onChanged: (newName) { - context - .read() - .add(FieldEditorEvent.updateName(newName)); - }, - ), - ); - }, - ), ); } } diff --git a/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/style_widget/text_field.dart b/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/style_widget/text_field.dart index be61f491dd..562f1f403c 100644 --- a/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/style_widget/text_field.dart +++ b/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/style_widget/text_field.dart @@ -54,15 +54,13 @@ class FlowyTextFieldState extends State { focusNode = widget.focusNode ?? FocusNode(); focusNode.addListener(notifyDidEndEditing); - if (widget.controller != null) { - controller = widget.controller!; - } else { - controller = TextEditingController(); - controller.text = widget.text; - } + controller = widget.controller ?? TextEditingController(); + controller.text = widget.text; if (widget.autoFocus) { WidgetsBinding.instance.addPostFrameCallback((_) { focusNode.requestFocus(); + controller.selection = TextSelection.fromPosition( + TextPosition(offset: controller.text.length)); }); } super.initState();