Update childAtOffset method

pull/633/head
X Code 3 years ago
parent d5affcf9a6
commit e9323a0582
  1. 15
      lib/src/widgets/editor.dart
  2. 2
      lib/src/widgets/text_block.dart

@ -1238,7 +1238,7 @@ class RenderEditor extends RenderEditableContainerBox
@override @override
TextPosition getPositionForOffset(Offset offset) { TextPosition getPositionForOffset(Offset offset) {
final local = globalToLocal(offset); final local = globalToLocal(offset);
final child = childAtOffset(local)!; final child = childAtOffset(local);
final parentData = child.parentData as BoxParentData; final parentData = child.parentData as BoxParentData;
final localOffset = local - parentData.offset; final localOffset = local - parentData.offset;
@ -1651,15 +1651,20 @@ class RenderEditableContainerBox extends RenderBox
markNeedsLayout(); markNeedsLayout();
} }
RenderEditableBox? childAtOffset(Offset offset) { /// Returns child of this container located at the specified local `offset`.
///
/// If `offset` is above this container (offset.dy is negative) returns
/// the first child. Likewise, if `offset` is below this container then
/// returns the last child.
RenderEditableBox childAtOffset(Offset offset) {
assert(firstChild != null); assert(firstChild != null);
resolvePadding(); resolvePadding();
if (offset.dy <= _resolvedPadding!.top) { if (offset.dy <= _resolvedPadding!.top) {
return firstChild; return firstChild!;
} }
if (offset.dy >= size.height - _resolvedPadding!.bottom) { if (offset.dy >= size.height - _resolvedPadding!.bottom) {
return lastChild; return lastChild!;
} }
var child = firstChild; var child = firstChild;
@ -1672,7 +1677,7 @@ class RenderEditableContainerBox extends RenderBox
dy += child.size.height; dy += child.size.height;
child = childAfter(child); child = childAfter(child);
} }
throw 'No child'; throw StateError('No child at offset $offset.');
} }
@override @override

@ -370,7 +370,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox
@override @override
TextPosition getPositionForOffset(Offset offset) { TextPosition getPositionForOffset(Offset offset) {
final child = childAtOffset(offset)!; final child = childAtOffset(offset);
final parentData = child.parentData as BoxParentData; final parentData = child.parentData as BoxParentData;
final localPosition = final localPosition =
child.getPositionForOffset(offset - parentData.offset); child.getPositionForOffset(offset - parentData.offset);

Loading…
Cancel
Save