From 33717598c5e911891cc559046b9532c16918ab91 Mon Sep 17 00:00:00 2001 From: chiarfe Date: Tue, 7 Oct 2025 17:39:29 +0200 Subject: [PATCH] fix: correct selection while scrolling --- lib/src/editor/editor.dart | 9 ++++++--- lib/src/editor/widgets/text/text_selection.dart | 8 +++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/src/editor/editor.dart b/lib/src/editor/editor.dart index f1b23db34..ee90591ec 100644 --- a/lib/src/editor/editor.dart +++ b/lib/src/editor/editor.dart @@ -984,19 +984,21 @@ class RenderEditor extends RenderEditableContainerBox if (position.offset < _extendSelectionOrigin!.baseOffset) { _handleSelectionChange( - TextSelection( + DragTextSelection( baseOffset: position.offset, extentOffset: _extendSelectionOrigin!.extentOffset, affinity: selection.affinity, + first: true, ), cause, ); } else if (position.offset > _extendSelectionOrigin!.extentOffset) { _handleSelectionChange( - TextSelection( + DragTextSelection( baseOffset: _extendSelectionOrigin!.baseOffset, extentOffset: position.offset, affinity: selection.affinity, + first: false, ), cause, ); @@ -1055,10 +1057,11 @@ class RenderEditor extends RenderEditableContainerBox extentOffset = math.max(fromPosition.offset, toPosition.offset); } - final newSelection = TextSelection( + final newSelection = DragTextSelection( baseOffset: baseOffset, extentOffset: extentOffset, affinity: fromPosition.affinity, + first: toPosition == null || fromPosition.offset <= toPosition.offset, ); // Call [onSelectionChanged] only when the selection actually changed. diff --git a/lib/src/editor/widgets/text/text_selection.dart b/lib/src/editor/widgets/text/text_selection.dart index 75517e486..fd8c48594 100644 --- a/lib/src/editor/widgets/text/text_selection.dart +++ b/lib/src/editor/widgets/text/text_selection.dart @@ -498,22 +498,24 @@ class _TextSelectionHandleOverlayState final isNormalized = widget.selection.extentOffset >= widget.selection.baseOffset; - TextSelection newSelection; + DragTextSelection newSelection; switch (widget.position) { case _TextSelectionHandlePosition.start: - newSelection = TextSelection( + newSelection = DragTextSelection( baseOffset: isNormalized ? position.offset : widget.selection.baseOffset, extentOffset: isNormalized ? widget.selection.extentOffset : position.offset, + first: true, ); break; case _TextSelectionHandlePosition.end: - newSelection = TextSelection( + newSelection = DragTextSelection( baseOffset: isNormalized ? widget.selection.baseOffset : position.offset, extentOffset: isNormalized ? position.offset : widget.selection.extentOffset, + first: false, ); break; }