浏览代码

fix: fix crash when selecting the last node

Lucas.Xu 2 年之前
父节点
当前提交
2f84d7e54e
共有 1 个文件被更改,包括 5 次插入9 次删除
  1. 5 9
      frontend/app_flowy/packages/flowy_editor/lib/service/selection_service.dart

+ 5 - 9
frontend/app_flowy/packages/flowy_editor/lib/service/selection_service.dart

@@ -313,13 +313,9 @@ class _FlowySelectionState extends State<FlowySelection>
           panStartOffsetWithScrollDyGap.translate(0, panStartScrollDy! - dy);
           panStartOffsetWithScrollDyGap.translate(0, panStartScrollDy! - dy);
     }
     }
 
 
-    final sortedNodes =
-        editorState.document.root.children.toList(growable: false);
-    final first = _lowerBound(
-            sortedNodes, panStartOffsetWithScrollDyGap, 0, sortedNodes.length)
-        .selectable;
-    final last = _upperBound(sortedNodes, panEndOffset!, 0, sortedNodes.length)
-        .selectable;
+    final first =
+        _lowerBoundInDocument(panStartOffsetWithScrollDyGap).selectable;
+    final last = _upperBoundInDocument(panEndOffset!).selectable;
 
 
     // compute the selection in range.
     // compute the selection in range.
     if (first != null && last != null) {
     if (first != null && last != null) {
@@ -518,13 +514,13 @@ class _FlowySelectionState extends State<FlowySelection>
   Node _lowerBoundInDocument(Offset offset) {
   Node _lowerBoundInDocument(Offset offset) {
     final sortedNodes =
     final sortedNodes =
         editorState.document.root.children.toList(growable: false);
         editorState.document.root.children.toList(growable: false);
-    return _lowerBound(sortedNodes, offset, 0, sortedNodes.length);
+    return _lowerBound(sortedNodes, offset, 0, sortedNodes.length - 1);
   }
   }
 
 
   Node _upperBoundInDocument(Offset offset) {
   Node _upperBoundInDocument(Offset offset) {
     final sortedNodes =
     final sortedNodes =
         editorState.document.root.children.toList(growable: false);
         editorState.document.root.children.toList(growable: false);
-    return _upperBound(sortedNodes, offset, 0, sortedNodes.length);
+    return _upperBound(sortedNodes, offset, 0, sortedNodes.length - 1);
   }
   }
 
 
   /// TODO: Supports multi-level nesting,
   /// TODO: Supports multi-level nesting,