Update delegate EditorState? get editor

pull/587/head
X Code 3 years ago
parent aa9ce68605
commit 8bd15fe785
  1. 34
      lib/src/widgets/delegate.dart
  2. 71
      lib/src/widgets/editor.dart

@ -60,16 +60,12 @@ class EditorTextSelectionGestureDetectorBuilder {
/// The [State] of the [EditableText] for which the builder will provide a /// The [State] of the [EditableText] for which the builder will provide a
/// [EditorTextSelectionGestureDetector]. /// [EditorTextSelectionGestureDetector].
@protected @protected
EditorState? getEditor() { EditorState? get editor => delegate.getEditableTextKey().currentState;
return delegate.getEditableTextKey().currentState;
}
/// The [RenderObject] of the [EditableText] for which the builder will /// The [RenderObject] of the [EditableText] for which the builder will
/// provide a [EditorTextSelectionGestureDetector]. /// provide a [EditorTextSelectionGestureDetector].
@protected @protected
RenderEditor? getRenderEditor() { RenderEditor? get renderEditor => editor?.renderEditor;
return getEditor()!.renderEditor;
}
/// Handler for [EditorTextSelectionGestureDetector.onTapDown]. /// Handler for [EditorTextSelectionGestureDetector.onTapDown].
/// ///
@ -83,7 +79,7 @@ class EditorTextSelectionGestureDetectorBuilder {
/// which triggers this callback. /// which triggers this callback.
@protected @protected
void onTapDown(TapDownDetails details) { void onTapDown(TapDownDetails details) {
getRenderEditor()!.handleTapDown(details); renderEditor!.handleTapDown(details);
// The selection overlay should only be shown when the user is interacting // The selection overlay should only be shown when the user is interacting
// through a touch screen (via either a finger or a stylus). // through a touch screen (via either a finger or a stylus).
// A mouse shouldn't trigger the selection overlay. // A mouse shouldn't trigger the selection overlay.
@ -110,7 +106,7 @@ class EditorTextSelectionGestureDetectorBuilder {
assert(delegate.getForcePressEnabled()); assert(delegate.getForcePressEnabled());
shouldShowSelectionToolbar = true; shouldShowSelectionToolbar = true;
if (delegate.getSelectionEnabled()) { if (delegate.getSelectionEnabled()) {
getRenderEditor()!.selectWordsInRange( renderEditor!.selectWordsInRange(
details.globalPosition, details.globalPosition,
null, null,
SelectionChangedCause.forcePress, SelectionChangedCause.forcePress,
@ -132,13 +128,13 @@ class EditorTextSelectionGestureDetectorBuilder {
@protected @protected
void onForcePressEnd(ForcePressDetails details) { void onForcePressEnd(ForcePressDetails details) {
assert(delegate.getForcePressEnabled()); assert(delegate.getForcePressEnabled());
getRenderEditor()!.selectWordsInRange( renderEditor!.selectWordsInRange(
details.globalPosition, details.globalPosition,
null, null,
SelectionChangedCause.forcePress, SelectionChangedCause.forcePress,
); );
if (shouldShowSelectionToolbar) { if (shouldShowSelectionToolbar) {
getEditor()!.showToolbar(); editor!.showToolbar();
} }
} }
@ -153,7 +149,7 @@ class EditorTextSelectionGestureDetectorBuilder {
@protected @protected
void onSingleTapUp(TapUpDetails details) { void onSingleTapUp(TapUpDetails details) {
if (delegate.getSelectionEnabled()) { if (delegate.getSelectionEnabled()) {
getRenderEditor()!.selectWordEdge(SelectionChangedCause.tap); renderEditor!.selectWordEdge(SelectionChangedCause.tap);
} }
} }
@ -182,7 +178,7 @@ class EditorTextSelectionGestureDetectorBuilder {
@protected @protected
void onSingleLongTapStart(LongPressStartDetails details) { void onSingleLongTapStart(LongPressStartDetails details) {
if (delegate.getSelectionEnabled()) { if (delegate.getSelectionEnabled()) {
getRenderEditor()!.selectPositionAt( renderEditor!.selectPositionAt(
from: details.globalPosition, from: details.globalPosition,
cause: SelectionChangedCause.longPress, cause: SelectionChangedCause.longPress,
); );
@ -201,7 +197,7 @@ class EditorTextSelectionGestureDetectorBuilder {
@protected @protected
void onSingleLongTapMoveUpdate(LongPressMoveUpdateDetails details) { void onSingleLongTapMoveUpdate(LongPressMoveUpdateDetails details) {
if (delegate.getSelectionEnabled()) { if (delegate.getSelectionEnabled()) {
getRenderEditor()!.selectPositionAt( renderEditor!.selectPositionAt(
from: details.globalPosition, from: details.globalPosition,
cause: SelectionChangedCause.longPress, cause: SelectionChangedCause.longPress,
); );
@ -219,7 +215,7 @@ class EditorTextSelectionGestureDetectorBuilder {
@protected @protected
void onSingleLongTapEnd(LongPressEndDetails details) { void onSingleLongTapEnd(LongPressEndDetails details) {
if (shouldShowSelectionToolbar) { if (shouldShowSelectionToolbar) {
getEditor()!.showToolbar(); editor!.showToolbar();
} }
} }
@ -235,9 +231,9 @@ class EditorTextSelectionGestureDetectorBuilder {
@protected @protected
void onDoubleTapDown(TapDownDetails details) { void onDoubleTapDown(TapDownDetails details) {
if (delegate.getSelectionEnabled()) { if (delegate.getSelectionEnabled()) {
getRenderEditor()!.selectWord(SelectionChangedCause.tap); renderEditor!.selectWord(SelectionChangedCause.tap);
if (shouldShowSelectionToolbar) { if (shouldShowSelectionToolbar) {
getEditor()!.showToolbar(); editor!.showToolbar();
} }
} }
} }
@ -252,7 +248,7 @@ class EditorTextSelectionGestureDetectorBuilder {
/// which triggers this callback. /// which triggers this callback.
@protected @protected
void onDragSelectionStart(DragStartDetails details) { void onDragSelectionStart(DragStartDetails details) {
getRenderEditor()!.handleDragStart(details); renderEditor!.handleDragStart(details);
} }
/// Handler for [EditorTextSelectionGestureDetector.onDragSelectionUpdate]. /// Handler for [EditorTextSelectionGestureDetector.onDragSelectionUpdate].
@ -267,7 +263,7 @@ class EditorTextSelectionGestureDetectorBuilder {
@protected @protected
void onDragSelectionUpdate( void onDragSelectionUpdate(
DragStartDetails startDetails, DragUpdateDetails updateDetails) { DragStartDetails startDetails, DragUpdateDetails updateDetails) {
getRenderEditor()!.extendSelection(updateDetails.globalPosition, renderEditor!.extendSelection(updateDetails.globalPosition,
cause: SelectionChangedCause.drag); cause: SelectionChangedCause.drag);
} }
@ -281,7 +277,7 @@ class EditorTextSelectionGestureDetectorBuilder {
/// which triggers this callback. /// which triggers this callback.
@protected @protected
void onDragSelectionEnd(DragEndDetails details) { void onDragSelectionEnd(DragEndDetails details) {
getRenderEditor()!.handleDragEnd(details); renderEditor!.handleDragEnd(details);
} }
/// Returns a [EditorTextSelectionGestureDetector] configured with /// Returns a [EditorTextSelectionGestureDetector] configured with

@ -599,7 +599,7 @@ class _QuillEditorSelectionGestureDetectorBuilder
void onForcePressStart(ForcePressDetails details) { void onForcePressStart(ForcePressDetails details) {
super.onForcePressStart(details); super.onForcePressStart(details);
if (delegate.getSelectionEnabled() && shouldShowSelectionToolbar) { if (delegate.getSelectionEnabled() && shouldShowSelectionToolbar) {
getEditor()!.showToolbar(); editor!.showToolbar();
} }
} }
@ -609,12 +609,10 @@ class _QuillEditorSelectionGestureDetectorBuilder
@override @override
void onSingleLongTapMoveUpdate(LongPressMoveUpdateDetails details) { void onSingleLongTapMoveUpdate(LongPressMoveUpdateDetails details) {
if (_state.widget.onSingleLongTapMoveUpdate != null) { if (_state.widget.onSingleLongTapMoveUpdate != null) {
final renderEditor = getRenderEditor(); if (renderEditor != null &&
if (renderEditor != null) { _state.widget.onSingleLongTapMoveUpdate!(
if (_state.widget.onSingleLongTapMoveUpdate!( details, renderEditor!.getPositionForOffset)) {
details, renderEditor.getPositionForOffset)) { return;
return;
}
} }
} }
if (!delegate.getSelectionEnabled()) { if (!delegate.getSelectionEnabled()) {
@ -623,7 +621,7 @@ class _QuillEditorSelectionGestureDetectorBuilder
switch (Theme.of(_state.context).platform) { switch (Theme.of(_state.context).platform) {
case TargetPlatform.iOS: case TargetPlatform.iOS:
case TargetPlatform.macOS: case TargetPlatform.macOS:
getRenderEditor()!.selectPositionAt( renderEditor!.selectPositionAt(
from: details.globalPosition, from: details.globalPosition,
cause: SelectionChangedCause.longPress, cause: SelectionChangedCause.longPress,
); );
@ -632,7 +630,7 @@ class _QuillEditorSelectionGestureDetectorBuilder
case TargetPlatform.fuchsia: case TargetPlatform.fuchsia:
case TargetPlatform.linux: case TargetPlatform.linux:
case TargetPlatform.windows: case TargetPlatform.windows:
getRenderEditor()!.selectWordsInRange( renderEditor!.selectWordsInRange(
details.globalPosition - details.offsetFromOrigin, details.globalPosition - details.offsetFromOrigin,
details.globalPosition, details.globalPosition,
SelectionChangedCause.longPress, SelectionChangedCause.longPress,
@ -647,16 +645,15 @@ class _QuillEditorSelectionGestureDetectorBuilder
if (_state.widget.controller.document.isEmpty()) { if (_state.widget.controller.document.isEmpty()) {
return false; return false;
} }
final pos = getRenderEditor()!.getPositionForOffset(details.globalPosition); final pos = renderEditor!.getPositionForOffset(details.globalPosition);
final result = final result = editor!.widget.controller.document.queryChild(pos.offset);
getEditor()!.widget.controller.document.queryChild(pos.offset);
if (result.node == null) { if (result.node == null) {
return false; return false;
} }
final line = result.node as Line; final line = result.node as Line;
final segmentResult = line.queryChild(result.offset, false); final segmentResult = line.queryChild(result.offset, false);
if (segmentResult.node == null && line.length == 1) { if (segmentResult.node == null && line.length == 1) {
getEditor()!.widget.controller.updateSelection( editor!.widget.controller.updateSelection(
TextSelection.collapsed(offset: pos.offset), ChangeSource.LOCAL); TextSelection.collapsed(offset: pos.offset), ChangeSource.LOCAL);
return true; return true;
} }
@ -666,12 +663,10 @@ class _QuillEditorSelectionGestureDetectorBuilder
@override @override
void onTapDown(TapDownDetails details) { void onTapDown(TapDownDetails details) {
if (_state.widget.onTapDown != null) { if (_state.widget.onTapDown != null) {
final renderEditor = getRenderEditor(); if (renderEditor != null &&
if (renderEditor != null) { _state.widget.onTapDown!(
if (_state.widget.onTapDown!( details, renderEditor!.getPositionForOffset)) {
details, renderEditor.getPositionForOffset)) { return;
return;
}
} }
} }
super.onTapDown(details); super.onTapDown(details);
@ -687,16 +682,13 @@ class _QuillEditorSelectionGestureDetectorBuilder
@override @override
void onSingleTapUp(TapUpDetails details) { void onSingleTapUp(TapUpDetails details) {
if (_state.widget.onTapUp != null) { if (_state.widget.onTapUp != null) {
final renderEditor = getRenderEditor(); if (renderEditor != null &&
if (renderEditor != null) { _state.widget.onTapUp!(details, renderEditor!.getPositionForOffset)) {
if (_state.widget.onTapUp!( return;
details, renderEditor.getPositionForOffset)) {
return;
}
} }
} }
getEditor()!.hideToolbar(); editor!.hideToolbar();
final positionSelected = _isPositionSelected(details); final positionSelected = _isPositionSelected(details);
@ -712,12 +704,12 @@ class _QuillEditorSelectionGestureDetectorBuilder
// If `Shift` key is pressed then // If `Shift` key is pressed then
// extend current selection instead. // extend current selection instead.
if (isShiftClick(details.kind)) { if (isShiftClick(details.kind)) {
getRenderEditor()! renderEditor!
..extendSelection(details.globalPosition, ..extendSelection(details.globalPosition,
cause: SelectionChangedCause.tap) cause: SelectionChangedCause.tap)
..onSelectionCompleted(); ..onSelectionCompleted();
} else { } else {
getRenderEditor()! renderEditor!
..selectPosition(cause: SelectionChangedCause.tap) ..selectPosition(cause: SelectionChangedCause.tap)
..onSelectionCompleted(); ..onSelectionCompleted();
} }
@ -728,7 +720,7 @@ class _QuillEditorSelectionGestureDetectorBuilder
// On macOS/iOS/iPadOS a touch tap places the cursor at the edge // On macOS/iOS/iPadOS a touch tap places the cursor at the edge
// of the word. // of the word.
try { try {
getRenderEditor()! renderEditor!
..selectWordEdge(SelectionChangedCause.tap) ..selectWordEdge(SelectionChangedCause.tap)
..onSelectionCompleted(); ..onSelectionCompleted();
} finally { } finally {
@ -741,7 +733,7 @@ class _QuillEditorSelectionGestureDetectorBuilder
case TargetPlatform.linux: case TargetPlatform.linux:
case TargetPlatform.windows: case TargetPlatform.windows:
try { try {
getRenderEditor()! renderEditor!
..selectPosition(cause: SelectionChangedCause.tap) ..selectPosition(cause: SelectionChangedCause.tap)
..onSelectionCompleted(); ..onSelectionCompleted();
} finally { } finally {
@ -755,12 +747,10 @@ class _QuillEditorSelectionGestureDetectorBuilder
@override @override
void onSingleLongTapStart(LongPressStartDetails details) { void onSingleLongTapStart(LongPressStartDetails details) {
if (_state.widget.onSingleLongTapStart != null) { if (_state.widget.onSingleLongTapStart != null) {
final renderEditor = getRenderEditor(); if (renderEditor != null &&
if (renderEditor != null) { _state.widget.onSingleLongTapStart!(
if (_state.widget.onSingleLongTapStart!( details, renderEditor!.getPositionForOffset)) {
details, renderEditor.getPositionForOffset)) { return;
return;
}
} }
} }
@ -768,7 +758,7 @@ class _QuillEditorSelectionGestureDetectorBuilder
switch (Theme.of(_state.context).platform) { switch (Theme.of(_state.context).platform) {
case TargetPlatform.iOS: case TargetPlatform.iOS:
case TargetPlatform.macOS: case TargetPlatform.macOS:
getRenderEditor()!.selectPositionAt( renderEditor!.selectPositionAt(
from: details.globalPosition, from: details.globalPosition,
cause: SelectionChangedCause.longPress, cause: SelectionChangedCause.longPress,
); );
@ -777,7 +767,7 @@ class _QuillEditorSelectionGestureDetectorBuilder
case TargetPlatform.fuchsia: case TargetPlatform.fuchsia:
case TargetPlatform.linux: case TargetPlatform.linux:
case TargetPlatform.windows: case TargetPlatform.windows:
getRenderEditor()!.selectWord(SelectionChangedCause.longPress); renderEditor!.selectWord(SelectionChangedCause.longPress);
Feedback.forLongPress(_state.context); Feedback.forLongPress(_state.context);
break; break;
default: default:
@ -789,15 +779,14 @@ class _QuillEditorSelectionGestureDetectorBuilder
@override @override
void onSingleLongTapEnd(LongPressEndDetails details) { void onSingleLongTapEnd(LongPressEndDetails details) {
if (_state.widget.onSingleLongTapEnd != null) { if (_state.widget.onSingleLongTapEnd != null) {
final renderEditor = getRenderEditor();
if (renderEditor != null) { if (renderEditor != null) {
if (_state.widget.onSingleLongTapEnd!( if (_state.widget.onSingleLongTapEnd!(
details, renderEditor.getPositionForOffset)) { details, renderEditor!.getPositionForOffset)) {
return; return;
} }
if (delegate.getSelectionEnabled()) { if (delegate.getSelectionEnabled()) {
renderEditor.onSelectionCompleted(); renderEditor!.onSelectionCompleted();
} }
} }
} }

Loading…
Cancel
Save