瀏覽代碼

fix: fix something wrong when deleting the text nodes

Lucas.Xu 2 年之前
父節點
當前提交
585c9f8753

+ 1 - 1
frontend/app_flowy/packages/flowy_editor/lib/document/node.dart

@@ -183,7 +183,7 @@ class TextNode extends Node {
         super(children: children ?? LinkedList(), attributes: attributes ?? {});
 
   TextNode.empty()
-      : _delta = Delta([TextInsert(' ')]),
+      : _delta = Delta([TextInsert('')]),
         super(
           type: 'text',
           children: LinkedList(),

+ 7 - 1
frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/delete_text_handler.dart

@@ -46,8 +46,14 @@ FlowyKeyEventHandler deleteTextHandler = (editorState, event) {
           if (textNode.previous is TextNode) {
             final previous = textNode.previous as TextNode;
             transactionBuilder
+              ..mergeText(previous, textNode)
               ..deleteNode(textNode)
-              ..mergeText(previous, textNode);
+              ..afterSelection = Selection.collapsed(
+                Position(
+                  path: previous.path,
+                  offset: previous.toRawString().length,
+                ),
+              );
             break;
           }
         }

+ 7 - 6
frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/enter_without_shift_in_text_node_handler.dart

@@ -17,7 +17,8 @@ import 'package:flowy_editor/service/keyboard_service.dart';
 /// 2. Single selection and the selected node is [TextNode]
 ///   2.1 split the node into two nodes with style
 ///   2.2 or insert a empty text node before.
-FlowyKeyEventHandler enterWithoutShiftHandler = (editorState, event) {
+FlowyKeyEventHandler enterWithoutShiftInTextNodesHandler =
+    (editorState, event) {
   if (event.logicalKey != LogicalKeyboardKey.enter || event.isShiftPressed) {
     return KeyEventResult.ignored;
   }
@@ -87,11 +88,6 @@ FlowyKeyEventHandler enterWithoutShiftHandler = (editorState, event) {
     Position(path: textNode.path.next, offset: 0),
   );
   TransactionBuilder(editorState)
-    ..deleteText(
-      textNode,
-      selection.start.offset,
-      textNode.toRawString().length,
-    )
     ..insertNode(
       textNode.path.next,
       textNode.copyWith(
@@ -99,6 +95,11 @@ FlowyKeyEventHandler enterWithoutShiftHandler = (editorState, event) {
         delta: textNode.delta.slice(selection.end.offset),
       ),
     )
+    ..deleteText(
+      textNode,
+      selection.start.offset,
+      textNode.toRawString().length - selection.start.offset,
+    )
     ..afterSelection = afterSelection
     ..commit();
   return KeyEventResult.handled;