diff --git a/frontend/app_flowy/packages/flowy_editor/lib/operation/transaction_builder.dart b/frontend/app_flowy/packages/flowy_editor/lib/operation/transaction_builder.dart index 64fede87b3..5c50a19c42 100644 --- a/frontend/app_flowy/packages/flowy_editor/lib/operation/transaction_builder.dart +++ b/frontend/app_flowy/packages/flowy_editor/lib/operation/transaction_builder.dart @@ -48,6 +48,10 @@ class TransactionBuilder { add(DeleteOperation(path: node.path, removedValue: node)); } + deleteNodes(List nodes) { + nodes.forEach(deleteNode); + } + textEdit(TextNode node, Delta Function() f) { beforeSelection = state.cursorSelection; final path = node.path; diff --git a/frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/delele_text_handler.dart b/frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/delele_text_handler.dart index b50d947d5c..601c0ffef6 100644 --- a/frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/delele_text_handler.dart +++ b/frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/delele_text_handler.dart @@ -57,24 +57,19 @@ FlowyKeyEventHandler deleteTextHandler = (editorState, event) { ); } } else { - for (var i = 0; i < textNodes.length; i++) { - final textNode = textNodes[i]; - if (i == 0) { - transactionBuilder.deleteText( - textNode, - selection.start.offset, - textNode.toRawString().length - selection.start.offset, - ); - } else if (i == textNodes.length - 1) { - transactionBuilder.deleteText( - textNode, - 0, - selection.end.offset, - ); - } else { - transactionBuilder.deleteNode(textNode); - } - } + final first = textNodes.first; + var content = textNodes.last.toRawString(); + content = content.substring(selection.end.offset, content.length); + // Merge the fist and the last text node content, + // and delete the all nodes expect for the first. + transactionBuilder + ..deleteNodes(textNodes.sublist(1)) + ..replaceText( + first, + selection.start.offset, + first.toRawString().length - selection.start.offset, + content, + ); } transactionBuilder.commit();