From 4f7cc55b42891a534d46b19a531d6919ea4a4175 Mon Sep 17 00:00:00 2001 From: X Code Date: Thu, 6 Jan 2022 09:45:46 -0800 Subject: [PATCH] Update RenderEditableBox Container get container --- lib/src/widgets/box.dart | 2 +- lib/src/widgets/editor.dart | 50 ++++++++++++++----------------- lib/src/widgets/text_block.dart | 53 ++++++++++++++++----------------- lib/src/widgets/text_line.dart | 10 +++---- 4 files changed, 53 insertions(+), 62 deletions(-) diff --git a/lib/src/widgets/box.dart b/lib/src/widgets/box.dart index f26da691..8b4f5f00 100644 --- a/lib/src/widgets/box.dart +++ b/lib/src/widgets/box.dart @@ -38,7 +38,7 @@ abstract class RenderContentProxyBox implements RenderBox { /// [RenderContentProxyBox]. abstract class RenderEditableBox extends RenderBox { /// The document node represented by this render box. - Container getContainer(); + Container get container; /// Returns preferred line height at specified `position` in text. /// diff --git a/lib/src/widgets/editor.dart b/lib/src/widgets/editor.dart index a515fd3e..f0c17bd5 100644 --- a/lib/src/widgets/editor.dart +++ b/lib/src/widgets/editor.dart @@ -994,7 +994,7 @@ class RenderEditor extends RenderEditableContainerBox if (textSelection.isCollapsed) { final child = childAtPosition(textSelection.extent); final localPosition = TextPosition( - offset: textSelection.extentOffset - child.getContainer().offset); + offset: textSelection.extentOffset - child.container.offset); final localOffset = child.getOffsetForCaret(localPosition); final parentData = child.parentData as BoxParentData; return [ @@ -1010,7 +1010,7 @@ class RenderEditor extends RenderEditableContainerBox var baseChild = firstChild; while (baseChild != null) { - if (baseChild.getContainer() == baseNode) { + if (baseChild.container == baseNode) { break; } baseChild = childAfter(baseChild); @@ -1019,7 +1019,7 @@ class RenderEditor extends RenderEditableContainerBox final baseParentData = baseChild!.parentData as BoxParentData; final baseSelection = - localSelection(baseChild.getContainer(), textSelection, true); + localSelection(baseChild.container, textSelection, true); var basePoint = baseChild.getBaseEndpointForSelection(baseSelection); basePoint = TextSelectionPoint( basePoint.point + baseParentData.offset, basePoint.direction); @@ -1027,7 +1027,7 @@ class RenderEditor extends RenderEditableContainerBox final extentNode = _container.queryChild(textSelection.end, false).node; RenderEditableBox? extentChild = baseChild; while (extentChild != null) { - if (extentChild.getContainer() == extentNode) { + if (extentChild.container == extentNode) { break; } extentChild = childAfter(extentChild); @@ -1036,7 +1036,7 @@ class RenderEditor extends RenderEditableContainerBox final extentParentData = extentChild!.parentData as BoxParentData; final extentSelection = - localSelection(extentChild.getContainer(), textSelection, true); + localSelection(extentChild.container, textSelection, true); var extentPoint = extentChild.getExtentEndpointForSelection(extentSelection); extentPoint = TextSelectionPoint( @@ -1146,7 +1146,7 @@ class RenderEditor extends RenderEditableContainerBox assert(_lastTapDownPosition != null); final position = getPositionForOffset(_lastTapDownPosition!); final child = childAtPosition(position); - final nodeOffset = child.getContainer().offset; + final nodeOffset = child.container.offset; final localPosition = TextPosition( offset: position.offset - nodeOffset, affinity: position.affinity, @@ -1335,7 +1335,7 @@ class RenderEditor extends RenderEditableContainerBox double preferredLineHeight(TextPosition position) { final child = childAtPosition(position); return child.preferredLineHeight( - TextPosition(offset: position.offset - child.getContainer().offset)); + TextPosition(offset: position.offset - child.container.offset)); } @override @@ -1347,7 +1347,7 @@ class RenderEditor extends RenderEditableContainerBox final localOffset = local - parentData.offset; final localPosition = child.getPositionForOffset(localOffset); return TextPosition( - offset: localPosition.offset + child.getContainer().offset, + offset: localPosition.offset + child.container.offset, affinity: localPosition.affinity, ); } @@ -1380,8 +1380,7 @@ class RenderEditor extends RenderEditableContainerBox final caretTop = endpoint.point.dy - child.preferredLineHeight(TextPosition( - offset: - selection.extentOffset - child.getContainer().documentOffset)) - + offset: selection.extentOffset - child.container.documentOffset)) - kMargin + offsetInViewport + scrollBottomInset; @@ -1540,7 +1539,7 @@ class RenderEditor extends RenderEditableContainerBox @override TextSelection getLineAtOffset(TextPosition position) { final child = childAtPosition(position); - final nodeOffset = child.getContainer().offset; + final nodeOffset = child.container.offset; final localPosition = TextPosition( offset: position.offset - nodeOffset, affinity: position.affinity); final localLineRange = child.getLineBoundary(localPosition); @@ -1554,7 +1553,7 @@ class RenderEditor extends RenderEditableContainerBox @override TextRange getWordBoundary(TextPosition position) { final child = childAtPosition(position); - final nodeOffset = child.getContainer().offset; + final nodeOffset = child.container.offset; final localPosition = TextPosition( offset: position.offset - nodeOffset, affinity: position.affinity); final localWord = child.getWordBoundary(localPosition); @@ -1571,8 +1570,8 @@ class RenderEditor extends RenderEditableContainerBox @override TextPosition getTextPositionAbove(TextPosition position) { final child = childAtPosition(position); - final localPosition = TextPosition( - offset: position.offset - child.getContainer().documentOffset); + final localPosition = + TextPosition(offset: position.offset - child.container.documentOffset); var newPosition = child.getPositionAbove(localPosition); @@ -1586,18 +1585,16 @@ class RenderEditor extends RenderEditableContainerBox newPosition = const TextPosition(offset: 0); } else { final caretOffset = child.getOffsetForCaret(localPosition); - final testPosition = - TextPosition(offset: sibling.getContainer().length - 1); + final testPosition = TextPosition(offset: sibling.container.length - 1); final testOffset = sibling.getOffsetForCaret(testPosition); final finalOffset = Offset(caretOffset.dx, testOffset.dy); final siblingPosition = sibling.getPositionForOffset(finalOffset); newPosition = TextPosition( - offset: - sibling.getContainer().documentOffset + siblingPosition.offset); + offset: sibling.container.documentOffset + siblingPosition.offset); } } else { newPosition = TextPosition( - offset: child.getContainer().documentOffset + newPosition.offset); + offset: child.container.documentOffset + newPosition.offset); } return newPosition; } @@ -1609,8 +1606,8 @@ class RenderEditor extends RenderEditableContainerBox @override TextPosition getTextPositionBelow(TextPosition position) { final child = childAtPosition(position); - final localPosition = TextPosition( - offset: position.offset - child.getContainer().documentOffset); + final localPosition = + TextPosition(offset: position.offset - child.container.documentOffset); var newPosition = child.getPositionBelow(localPosition); @@ -1629,12 +1626,11 @@ class RenderEditor extends RenderEditableContainerBox final finalOffset = Offset(caretOffset.dx, testOffset.dy); final siblingPosition = sibling.getPositionForOffset(finalOffset); newPosition = TextPosition( - offset: - sibling.getContainer().documentOffset + siblingPosition.offset); + offset: sibling.container.documentOffset + siblingPosition.offset); } } else { newPosition = TextPosition( - offset: child.getContainer().documentOffset + newPosition.offset); + offset: child.container.documentOffset + newPosition.offset); } return newPosition; } @@ -1679,9 +1675,7 @@ class RenderEditableContainerBox extends RenderBox double scrollBottomInset; EdgeInsets? _resolvedPadding; - container_node.Container getContainer() { - return _container; - } + container_node.Container get container => _container; void setContainer(container_node.Container c) { if (_container == c) { @@ -1721,7 +1715,7 @@ class RenderEditableContainerBox extends RenderBox var targetChild = firstChild; while (targetChild != null) { - if (targetChild.getContainer() == targetNode) { + if (targetChild.container == targetNode) { break; } final newChild = childAfter(targetChild); diff --git a/lib/src/widgets/text_block.dart b/lib/src/widgets/text_block.dart index 7e8c4016..51192d4d 100644 --- a/lib/src/widgets/text_block.dart +++ b/lib/src/widgets/text_block.dart @@ -349,12 +349,12 @@ class RenderEditableTextBlock extends RenderEditableContainerBox TextRange getLineBoundary(TextPosition position) { final child = childAtPosition(position); final rangeInChild = child.getLineBoundary(TextPosition( - offset: position.offset - child.getContainer().offset, + offset: position.offset - child.container.offset, affinity: position.affinity, )); return TextRange( - start: rangeInChild.start + child.getContainer().offset, - end: rangeInChild.end + child.getContainer().offset, + start: rangeInChild.start + child.container.offset, + end: rangeInChild.end + child.container.offset, ); } @@ -362,7 +362,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox Offset getOffsetForCaret(TextPosition position) { final child = childAtPosition(position); return child.getOffsetForCaret(TextPosition( - offset: position.offset - child.getContainer().offset, + offset: position.offset - child.container.offset, affinity: position.affinity, )) + (child.parentData as BoxParentData).offset; @@ -375,7 +375,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox final localPosition = child.getPositionForOffset(offset - parentData.offset); return TextPosition( - offset: localPosition.offset + child.getContainer().offset, + offset: localPosition.offset + child.container.offset, affinity: localPosition.affinity, ); } @@ -383,7 +383,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox @override TextRange getWordBoundary(TextPosition position) { final child = childAtPosition(position); - final nodeOffset = child.getContainer().offset; + final nodeOffset = child.container.offset; final childWord = child .getWordBoundary(TextPosition(offset: position.offset - nodeOffset)); return TextRange( @@ -394,14 +394,14 @@ class RenderEditableTextBlock extends RenderEditableContainerBox @override TextPosition? getPositionAbove(TextPosition position) { - assert(position.offset < getContainer().length); + assert(position.offset < container.length); final child = childAtPosition(position); final childLocalPosition = - TextPosition(offset: position.offset - child.getContainer().offset); + TextPosition(offset: position.offset - child.container.offset); final result = child.getPositionAbove(childLocalPosition); if (result != null) { - return TextPosition(offset: result.offset + child.getContainer().offset); + return TextPosition(offset: result.offset + child.container.offset); } final sibling = childBefore(child); @@ -410,25 +410,24 @@ class RenderEditableTextBlock extends RenderEditableContainerBox } final caretOffset = child.getOffsetForCaret(childLocalPosition); - final testPosition = - TextPosition(offset: sibling.getContainer().length - 1); + final testPosition = TextPosition(offset: sibling.container.length - 1); final testOffset = sibling.getOffsetForCaret(testPosition); final finalOffset = Offset(caretOffset.dx, testOffset.dy); return TextPosition( - offset: sibling.getContainer().offset + + offset: sibling.container.offset + sibling.getPositionForOffset(finalOffset).offset); } @override TextPosition? getPositionBelow(TextPosition position) { - assert(position.offset < getContainer().length); + assert(position.offset < container.length); final child = childAtPosition(position); final childLocalPosition = - TextPosition(offset: position.offset - child.getContainer().offset); + TextPosition(offset: position.offset - child.container.offset); final result = child.getPositionBelow(childLocalPosition); if (result != null) { - return TextPosition(offset: result.offset + child.getContainer().offset); + return TextPosition(offset: result.offset + child.container.offset); } final sibling = childAfter(child); @@ -440,7 +439,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox final testOffset = sibling.getOffsetForCaret(const TextPosition(offset: 0)); final finalOffset = Offset(caretOffset.dx, testOffset.dy); return TextPosition( - offset: sibling.getContainer().offset + + offset: sibling.container.offset + sibling.getPositionForOffset(finalOffset).offset); } @@ -448,7 +447,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox double preferredLineHeight(TextPosition position) { final child = childAtPosition(position); return child.preferredLineHeight( - TextPosition(offset: position.offset - child.getContainer().offset)); + TextPosition(offset: position.offset - child.container.offset)); } @override @@ -460,10 +459,10 @@ class RenderEditableTextBlock extends RenderEditableContainerBox null); } - final baseNode = getContainer().queryChild(selection.start, false).node; + final baseNode = container.queryChild(selection.start, false).node; var baseChild = firstChild; while (baseChild != null) { - if (baseChild.getContainer() == baseNode) { + if (baseChild.container == baseNode) { break; } baseChild = childAfter(baseChild); @@ -471,7 +470,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox assert(baseChild != null); final basePoint = baseChild!.getBaseEndpointForSelection( - localSelection(baseChild.getContainer(), selection, true)); + localSelection(baseChild.container, selection, true)); return TextSelectionPoint( basePoint.point + (baseChild.parentData as BoxParentData).offset, basePoint.direction); @@ -486,11 +485,11 @@ class RenderEditableTextBlock extends RenderEditableContainerBox null); } - final extentNode = getContainer().queryChild(selection.end, false).node; + final extentNode = container.queryChild(selection.end, false).node; var extentChild = firstChild; while (extentChild != null) { - if (extentChild.getContainer() == extentNode) { + if (extentChild.container == extentNode) { break; } extentChild = childAfter(extentChild); @@ -498,7 +497,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox assert(extentChild != null); final extentPoint = extentChild!.getExtentEndpointForSelection( - localSelection(extentChild.getContainer(), selection, true)); + localSelection(extentChild.container, selection, true)); return TextSelectionPoint( extentPoint.point + (extentChild.parentData as BoxParentData).offset, extentPoint.direction); @@ -548,7 +547,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox Rect getLocalRectForCaret(TextPosition position) { final child = childAtPosition(position); final localPosition = TextPosition( - offset: position.offset - child.getContainer().offset, + offset: position.offset - child.container.offset, affinity: position.affinity, ); final parentData = child.parentData as BoxParentData; @@ -557,10 +556,10 @@ class RenderEditableTextBlock extends RenderEditableContainerBox @override TextPosition globalToLocalPosition(TextPosition position) { - assert(getContainer().containsOffset(position.offset), + assert(container.containsOffset(position.offset), 'The provided text position is not in the current node'); return TextPosition( - offset: position.offset - getContainer().documentOffset, + offset: position.offset - container.documentOffset, affinity: position.affinity, ); } @@ -569,7 +568,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox Rect getCaretPrototype(TextPosition position) { final child = childAtPosition(position); final localPosition = TextPosition( - offset: position.offset - child.getContainer().offset, + offset: position.offset - child.container.offset, affinity: position.affinity, ); return child.getCaretPrototype(localPosition); diff --git a/lib/src/widgets/text_line.dart b/lib/src/widgets/text_line.dart index f5138a7c..92e22841 100644 --- a/lib/src/widgets/text_line.dart +++ b/lib/src/widgets/text_line.dart @@ -10,7 +10,7 @@ import 'package:tuple/tuple.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../flutter_quill.dart'; -import '../models/documents/nodes/container.dart' as container; +import '../models/documents/nodes/container.dart' as container_node; import '../models/documents/nodes/leaf.dart' as leaf; import '../models/documents/nodes/line.dart'; import '../models/documents/nodes/node.dart'; @@ -839,9 +839,7 @@ class RenderEditableTextLine extends RenderEditableBox { } @override - container.Container getContainer() { - return line; - } + container_node.Container get container => line; double get cursorWidth => cursorCont.style.width; @@ -1188,10 +1186,10 @@ class RenderEditableTextLine extends RenderEditableBox { @override TextPosition globalToLocalPosition(TextPosition position) { - assert(getContainer().containsOffset(position.offset), + assert(container.containsOffset(position.offset), 'The provided text position is not in the current node'); return TextPosition( - offset: position.offset - getContainer().documentOffset, + offset: position.offset - container.documentOffset, affinity: position.affinity, ); }