@@ -2,7 +2,6 @@ import 'package:appflowy_editor/src/service/internal_key_event_handlers/number_l
22import 'package:flutter/material.dart' ;
33import 'package:flutter/services.dart' ;
44import 'package:appflowy_editor/appflowy_editor.dart' ;
5- import 'package:appflowy_editor/src/extensions/path_extensions.dart' ;
65
76// Handle delete text.
87ShortcutEventHandler deleteTextHandler = (editorState, event) {
@@ -128,33 +127,38 @@ KeyEventResult _backDeleteToPreviousTextNode(
128127 Selection selection,
129128) {
130129 // Not reach to the root.
131- if (textNode.parent? .parent != null ) {
132- transactionBuilder
133- ..deleteNode (textNode)
134- ..insertNode (textNode.parent! .path.next, textNode)
135- ..afterSelection = Selection .collapsed (
136- Position (path: textNode.parent! .path.next, offset: 0 ),
137- )
138- ..commit ();
139- return KeyEventResult .handled;
140- }
130+ // if (textNode.parent?.parent != null) {
131+ // transactionBuilder
132+ // ..deleteNode(textNode)
133+ // ..insertNode(textNode.parent!.path.next, textNode)
134+ // ..afterSelection = Selection.collapsed(
135+ // Position(path: textNode.parent!.path.next, offset: 0),
136+ // )
137+ // ..commit();
138+ // return KeyEventResult.handled;
139+ // }
141140
142141 bool prevIsNumberList = false ;
143- final previousTextNode = _closestTextNode (textNode.previous );
144- if (previousTextNode != null && previousTextNode is TextNode ) {
142+ final previousTextNode = forwardNearestTextNode (textNode);
143+ if (previousTextNode != null ) {
145144 if (previousTextNode.subtype == BuiltInAttributeKey .numberList) {
146145 prevIsNumberList = true ;
147146 }
148147
149- transactionBuilder
150- ..mergeText (previousTextNode, textNode)
151- ..deleteNode (textNode)
152- ..afterSelection = Selection .collapsed (
153- Position (
154- path: previousTextNode.path,
155- offset: previousTextNode.toRawString ().length,
156- ),
148+ transactionBuilder.mergeText (previousTextNode, textNode);
149+ transactionBuilder.deleteNode (textNode);
150+ if (textNode.children.isNotEmpty) {
151+ transactionBuilder.insertNodes (
152+ previousTextNode.path + [0 ],
153+ textNode.children.toList (growable: false ),
157154 );
155+ }
156+ transactionBuilder.afterSelection = Selection .collapsed (
157+ Position (
158+ path: previousTextNode.path,
159+ offset: previousTextNode.toRawString ().length,
160+ ),
161+ );
158162 }
159163
160164 if (transactionBuilder.operations.isNotEmpty) {
@@ -271,24 +275,6 @@ void _deleteTextNodes(TransactionBuilder transactionBuilder,
271275}
272276
273277// TODO: Just a simple solution for textNode, need to be optimized.
274- Node ? _closestTextNode (Node ? node) {
275- if (node is TextNode ) {
276- var children = node.children;
277- if (children.isEmpty) {
278- return node;
279- }
280- var last = children.last;
281- while (last.children.isNotEmpty) {
282- last = children.last;
283- }
284- return last;
285- }
286- if (node? .previous != null ) {
287- return _closestTextNode (node! .previous! );
288- }
289- return null ;
290- }
291-
292278TextNode ? findLastTextNode (Node node) {
293279 final children = node.children.toList (growable: false ).reversed;
294280 for (final child in children) {
@@ -330,13 +316,3 @@ TextNode? forwardNearestTextNode(Node node) {
330316 }
331317 return null ;
332318}
333-
334- Node ? _forwardNearestTextNode (Node node) {
335- if (node is TextNode ) {
336- return node;
337- }
338- if (node.next != null ) {
339- return _forwardNearestTextNode (node.next! );
340- }
341- return null ;
342- }
0 commit comments