From 5c099297a42d7e0155fbd3a7f49fa1bb137b156c Mon Sep 17 00:00:00 2001 From: squidrye Date: Tue, 21 Mar 2023 16:26:04 +0530 Subject: [PATCH] fix: slash menu responds to multiple key events --- .../selection_menu/selection_menu_widget.dart | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/frontend/appflowy_flutter/packages/appflowy_editor/lib/src/render/selection_menu/selection_menu_widget.dart b/frontend/appflowy_flutter/packages/appflowy_editor/lib/src/render/selection_menu/selection_menu_widget.dart index 3a88cfcd4a..8af25c7325 100644 --- a/frontend/appflowy_flutter/packages/appflowy_editor/lib/src/render/selection_menu/selection_menu_widget.dart +++ b/frontend/appflowy_flutter/packages/appflowy_editor/lib/src/render/selection_menu/selection_menu_widget.dart @@ -324,7 +324,7 @@ class _SelectionMenuWidgetState extends State { _deleteLastCharacters(); return KeyEventResult.handled; } else if (event.character != null && - !arrowKeys.contains(event.logicalKey)) { + !arrowKeys.contains(event.logicalKey) && event.logicalKey != LogicalKeyboardKey.tab) { keyword += event.character!; _insertText(event.character!); return KeyEventResult.handled; @@ -339,7 +339,18 @@ class _SelectionMenuWidgetState extends State { newSelectedIndex -= 1; } else if (event.logicalKey == LogicalKeyboardKey.arrowDown) { newSelectedIndex += 1; + }else if (event.logicalKey == LogicalKeyboardKey.tab) { + newSelectedIndex += widget.maxItemInRow; + var currRow = (newSelectedIndex) % widget.maxItemInRow; + if (newSelectedIndex >= _showingItems.length) { + if (currRow + 1 >= widget.maxItemInRow) { + newSelectedIndex = 0; + } else { + newSelectedIndex = (currRow + 1); + } + } } + if (newSelectedIndex != _selectedIndex) { setState(() { _selectedIndex = newSelectedIndex.clamp(0, _showingItems.length - 1);