Fix _handleDragUpdate in _TextSelectionHandleOverlayState

pull/630/head
X Code 3 years ago
parent f007354970
commit 86aff2a038
  1. 18
      lib/src/widgets/text_selection.dart

@ -445,8 +445,9 @@ class _TextSelectionHandleOverlay extends StatefulWidget {
class _TextSelectionHandleOverlayState
extends State<_TextSelectionHandleOverlay>
with SingleTickerProviderStateMixin {
// ignore: unused_field
late Offset _dragPosition;
late Size _handleSize;
late AnimationController _controller;
Animation<double> get _opacity => _controller.view;
@ -486,12 +487,18 @@ class _TextSelectionHandleOverlayState
}
void _handleDragStart(DragStartDetails details) {
_dragPosition = details.globalPosition + Offset(0, -_handleSize.height);
final textPosition = widget.position == _TextSelectionHandlePosition.START
? widget.selection.base
: widget.selection.extent;
final lineHeight = widget.renderObject.preferredLineHeight(textPosition);
final handleSize = widget.selectionControls.getHandleSize(lineHeight);
_dragPosition = details.globalPosition + Offset(0, -handleSize.height);
}
void _handleDragUpdate(DragUpdateDetails details) {
_dragPosition += details.delta;
final position = widget.renderObject.getPositionForOffset(_dragPosition);
final position =
widget.renderObject.getPositionForOffset(details.globalPosition);
if (widget.selection.isCollapsed) {
widget.onSelectionHandleChanged(TextSelection.fromPosition(position));
return;
@ -499,7 +506,7 @@ class _TextSelectionHandleOverlayState
final isNormalized =
widget.selection.extentOffset >= widget.selection.baseOffset;
TextSelection? newSelection;
TextSelection newSelection;
switch (widget.position) {
case _TextSelectionHandlePosition.START:
newSelection = TextSelection(
@ -517,6 +524,8 @@ class _TextSelectionHandleOverlayState
isNormalized ? position.offset : widget.selection.extentOffset,
);
break;
default:
throw 'Invalid widget.position';
}
if (newSelection.baseOffset >= newSelection.extentOffset) {
@ -571,7 +580,6 @@ class _TextSelectionHandleOverlayState
final handleAnchor =
widget.selectionControls.getHandleAnchor(type!, lineHeight);
final handleSize = widget.selectionControls.getHandleSize(lineHeight);
_handleSize = handleSize;
final handleRect = Rect.fromLTWH(
-handleAnchor.dx,

Loading…
Cancel
Save