From e9323a058279a860aeee6eeb5a47806ab1b6b620 Mon Sep 17 00:00:00 2001 From: X Code Date: Sun, 30 Jan 2022 15:55:51 -0800 Subject: [PATCH] Update childAtOffset method --- lib/src/widgets/editor.dart | 15 ++++++++++----- lib/src/widgets/text_block.dart | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/src/widgets/editor.dart b/lib/src/widgets/editor.dart index 61ab6cfc..b36e2835 100644 --- a/lib/src/widgets/editor.dart +++ b/lib/src/widgets/editor.dart @@ -1238,7 +1238,7 @@ class RenderEditor extends RenderEditableContainerBox @override TextPosition getPositionForOffset(Offset offset) { final local = globalToLocal(offset); - final child = childAtOffset(local)!; + final child = childAtOffset(local); final parentData = child.parentData as BoxParentData; final localOffset = local - parentData.offset; @@ -1651,15 +1651,20 @@ class RenderEditableContainerBox extends RenderBox 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); resolvePadding(); if (offset.dy <= _resolvedPadding!.top) { - return firstChild; + return firstChild!; } if (offset.dy >= size.height - _resolvedPadding!.bottom) { - return lastChild; + return lastChild!; } var child = firstChild; @@ -1672,7 +1677,7 @@ class RenderEditableContainerBox extends RenderBox dy += child.size.height; child = childAfter(child); } - throw 'No child'; + throw StateError('No child at offset $offset.'); } @override diff --git a/lib/src/widgets/text_block.dart b/lib/src/widgets/text_block.dart index 51192d4d..6b686879 100644 --- a/lib/src/widgets/text_block.dart +++ b/lib/src/widgets/text_block.dart @@ -370,7 +370,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox @override TextPosition getPositionForOffset(Offset offset) { - final child = childAtOffset(offset)!; + final child = childAtOffset(offset); final parentData = child.parentData as BoxParentData; final localPosition = child.getPositionForOffset(offset - parentData.offset);