diff --git a/frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/slash_handler.dart b/frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/slash_handler.dart index d985e2beb7..68bcdca7a6 100644 --- a/frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/slash_handler.dart +++ b/frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/slash_handler.dart @@ -208,7 +208,14 @@ class _PopupListWidgetState extends State { } if (event.logicalKey == LogicalKeyboardKey.enter) { - widget.items[selectedIndex].handler(widget.editorState); + if (0 <= selectedIndex && selectedIndex < widget.items.length) { + widget.items[selectedIndex].handler(widget.editorState); + return KeyEventResult.handled; + } + } + + if (event.logicalKey == LogicalKeyboardKey.escape) { + clearPopupListOverlay(); return KeyEventResult.handled; } diff --git a/frontend/app_flowy/packages/flowy_editor/lib/service/keyboard_service.dart b/frontend/app_flowy/packages/flowy_editor/lib/service/keyboard_service.dart index 572babeb3a..01cc0214a1 100644 --- a/frontend/app_flowy/packages/flowy_editor/lib/service/keyboard_service.dart +++ b/frontend/app_flowy/packages/flowy_editor/lib/service/keyboard_service.dart @@ -32,23 +32,23 @@ class FlowyKeyboard extends StatefulWidget { class _FlowyKeyboardState extends State with FlowyKeyboardService { - final FocusNode focusNode = FocusNode(debugLabel: 'flowy_keyboard_service'); + final FocusNode _focusNode = FocusNode(debugLabel: 'flowy_keyboard_service'); bool isFocus = true; @override Widget build(BuildContext context) { return Focus( - focusNode: focusNode, - autofocus: true, + focusNode: _focusNode, onKey: _onKey, + onFocusChange: _onFocusChange, child: widget.child, ); } @override void dispose() { - focusNode.dispose(); + _focusNode.dispose(); super.dispose(); } @@ -56,13 +56,17 @@ class _FlowyKeyboardState extends State @override void enable() { isFocus = true; - focusNode.requestFocus(); + _focusNode.requestFocus(); } @override void disable() { isFocus = false; - focusNode.unfocus(); + _focusNode.unfocus(); + } + + void _onFocusChange(bool value) { + debugPrint('[KeyBoard Service] focus change $value'); } KeyEventResult _onKey(FocusNode node, RawKeyEvent event) { diff --git a/frontend/app_flowy/packages/flowy_editor/lib/service/selection_service.dart b/frontend/app_flowy/packages/flowy_editor/lib/service/selection_service.dart index 55a9230272..8baa54c26f 100644 --- a/frontend/app_flowy/packages/flowy_editor/lib/service/selection_service.dart +++ b/frontend/app_flowy/packages/flowy_editor/lib/service/selection_service.dart @@ -265,6 +265,8 @@ class _FlowySelectionState extends State } final selection = Selection.collapsed(position); editorState.updateCursorSelection(selection); + + editorState.service.keyboardService?.enable(); } @override