From 8cfe7491e8deadd6983ee06bd0ed00d3f6910a7c Mon Sep 17 00:00:00 2001 From: Amir Panahandeh Date: Wed, 19 Jul 2023 15:06:25 +0330 Subject: [PATCH] Fix hit test issue in text line --- .../lib/src/rendering/editable_box.dart | 2 +- .../lib/src/rendering/editable_text_line.dart | 31 ++++++++++++------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/packages/fleather/lib/src/rendering/editable_box.dart b/packages/fleather/lib/src/rendering/editable_box.dart index f538870d..cda4a31e 100644 --- a/packages/fleather/lib/src/rendering/editable_box.dart +++ b/packages/fleather/lib/src/rendering/editable_box.dart @@ -313,7 +313,7 @@ class RenderEditableContainerBox extends RenderBox var mainAxisExtent = _resolvedPadding!.top; var child = firstChild; - final innerConstraints = constraints.loosen().deflate(_resolvedPadding!); + final innerConstraints = constraints.deflate(_resolvedPadding!); while (child != null) { child.layout(innerConstraints, parentUsesSize: true); final childParentData = child.parentData as EditableContainerParentData; diff --git a/packages/fleather/lib/src/rendering/editable_text_line.dart b/packages/fleather/lib/src/rendering/editable_text_line.dart index 9df0bc68..d852f498 100644 --- a/packages/fleather/lib/src/rendering/editable_text_line.dart +++ b/packages/fleather/lib/src/rendering/editable_text_line.dart @@ -632,7 +632,7 @@ class RenderEditableTextLine extends RenderEditableBox { )); return; } - final innerConstraints = constraints.loosen().deflate(_resolvedPadding!); + final innerConstraints = constraints.deflate(_resolvedPadding!); final indentWidth = textDirection == TextDirection.ltr ? _resolvedPadding!.left @@ -782,23 +782,30 @@ class RenderEditableTextLine extends RenderEditableBox { if (leading != null) { final childParentData = leading!.parentData as BoxParentData; final isHit = result.addWithPaintOffset( - offset: childParentData.offset, - position: position, - hitTest: (BoxHitTestResult result, Offset transformed) { - assert(transformed == position - childParentData.offset); - return leading!.hitTest(result, position: transformed); - }); + offset: childParentData.offset, + position: position, + hitTest: (result, transformed) => + leading!.hitTest(result, position: transformed), + ); if (isHit) return true; } if (body == null) return false; final parentData = body!.parentData as BoxParentData; - return result.addWithPaintOffset( + final offset = position - parentData.offset; + final textBoxes = body!.getBoxesForSelection( + TextSelection(baseOffset: 0, extentOffset: node.toPlainText().length)); + final isInTextBoxes = textBoxes.any((e) => + Rect.fromLTRB(e.left, e.top, e.right, e.bottom).contains(offset)); + if (isInTextBoxes) { + return result.addWithPaintOffset( offset: parentData.offset, position: position, - hitTest: (BoxHitTestResult result, Offset position) { - return body!.hitTest(result, position: position); - }); + hitTest: (result, position) => + body!.hitTest(result, position: position), + ); + } + return false; } // End render box overrides -} +} \ No newline at end of file