|
|
@ -233,7 +233,6 @@ class RawEditorState extends EditorState |
|
|
|
AutomaticKeepAliveClientMixin<RawEditor>, |
|
|
|
AutomaticKeepAliveClientMixin<RawEditor>, |
|
|
|
WidgetsBindingObserver, |
|
|
|
WidgetsBindingObserver, |
|
|
|
TickerProviderStateMixin<RawEditor>, |
|
|
|
TickerProviderStateMixin<RawEditor>, |
|
|
|
TextEditingActionTarget, |
|
|
|
|
|
|
|
RawEditorStateTextInputClientMixin, |
|
|
|
RawEditorStateTextInputClientMixin, |
|
|
|
RawEditorStateSelectionDelegateMixin { |
|
|
|
RawEditorStateSelectionDelegateMixin { |
|
|
|
final GlobalKey _editorKey = GlobalKey(); |
|
|
|
final GlobalKey _editorKey = GlobalKey(); |
|
|
@ -256,7 +255,6 @@ class RawEditorState extends EditorState |
|
|
|
|
|
|
|
|
|
|
|
// Focus |
|
|
|
// Focus |
|
|
|
bool _didAutoFocus = false; |
|
|
|
bool _didAutoFocus = false; |
|
|
|
FocusAttachment? _focusAttachment; |
|
|
|
|
|
|
|
bool get _hasFocus => widget.focusNode.hasFocus; |
|
|
|
bool get _hasFocus => widget.focusNode.hasFocus; |
|
|
|
|
|
|
|
|
|
|
|
// Theme |
|
|
|
// Theme |
|
|
@ -280,7 +278,6 @@ class RawEditorState extends EditorState |
|
|
|
@override |
|
|
|
@override |
|
|
|
Widget build(BuildContext context) { |
|
|
|
Widget build(BuildContext context) { |
|
|
|
assert(debugCheckHasMediaQuery(context)); |
|
|
|
assert(debugCheckHasMediaQuery(context)); |
|
|
|
_focusAttachment!.reparent(); |
|
|
|
|
|
|
|
super.build(context); |
|
|
|
super.build(context); |
|
|
|
|
|
|
|
|
|
|
|
var _doc = widget.controller.document; |
|
|
|
var _doc = widget.controller.document; |
|
|
@ -568,7 +565,7 @@ class RawEditorState extends EditorState |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_focusAttachment = widget.focusNode.attach(context); |
|
|
|
// Focus |
|
|
|
widget.focusNode.addListener(_handleFocusChanged); |
|
|
|
widget.focusNode.addListener(_handleFocusChanged); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -612,8 +609,6 @@ class RawEditorState extends EditorState |
|
|
|
|
|
|
|
|
|
|
|
if (widget.focusNode != oldWidget.focusNode) { |
|
|
|
if (widget.focusNode != oldWidget.focusNode) { |
|
|
|
oldWidget.focusNode.removeListener(_handleFocusChanged); |
|
|
|
oldWidget.focusNode.removeListener(_handleFocusChanged); |
|
|
|
_focusAttachment?.detach(); |
|
|
|
|
|
|
|
_focusAttachment = widget.focusNode.attach(context); |
|
|
|
|
|
|
|
widget.focusNode.addListener(_handleFocusChanged); |
|
|
|
widget.focusNode.addListener(_handleFocusChanged); |
|
|
|
updateKeepAlive(); |
|
|
|
updateKeepAlive(); |
|
|
|
} |
|
|
|
} |
|
|
@ -651,7 +646,6 @@ class RawEditorState extends EditorState |
|
|
|
_selectionOverlay = null; |
|
|
|
_selectionOverlay = null; |
|
|
|
widget.controller.removeListener(_didChangeTextEditingValue); |
|
|
|
widget.controller.removeListener(_didChangeTextEditingValue); |
|
|
|
widget.focusNode.removeListener(_handleFocusChanged); |
|
|
|
widget.focusNode.removeListener(_handleFocusChanged); |
|
|
|
_focusAttachment!.detach(); |
|
|
|
|
|
|
|
_cursorCont.dispose(); |
|
|
|
_cursorCont.dispose(); |
|
|
|
_clipboardStatus |
|
|
|
_clipboardStatus |
|
|
|
..removeListener(_onChangedClipboardStatus) |
|
|
|
..removeListener(_onChangedClipboardStatus) |
|
|
@ -828,8 +822,15 @@ class RawEditorState extends EditorState |
|
|
|
/// This property is typically used to notify the renderer of input gestures. |
|
|
|
/// This property is typically used to notify the renderer of input gestures. |
|
|
|
@override |
|
|
|
@override |
|
|
|
RenderEditor get renderEditor => |
|
|
|
RenderEditor get renderEditor => |
|
|
|
_editorKey.currentContext?.findRenderObject() as RenderEditor; |
|
|
|
_editorKey.currentContext!.findRenderObject() as RenderEditor; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Express interest in interacting with the keyboard. |
|
|
|
|
|
|
|
/// |
|
|
|
|
|
|
|
/// If this control is already attached to the keyboard, this function will |
|
|
|
|
|
|
|
/// request that the keyboard become visible. Otherwise, this function will |
|
|
|
|
|
|
|
/// ask the focus system that it become focused. If successful in acquiring |
|
|
|
|
|
|
|
/// focus, the control will then attach to the keyboard and request that the |
|
|
|
|
|
|
|
/// keyboard become visible. |
|
|
|
@override |
|
|
|
@override |
|
|
|
void requestKeyboard() { |
|
|
|
void requestKeyboard() { |
|
|
|
if (_hasFocus) { |
|
|
|
if (_hasFocus) { |
|
|
@ -840,24 +841,6 @@ class RawEditorState extends EditorState |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
|
|
|
|
void setTextEditingValue( |
|
|
|
|
|
|
|
TextEditingValue value, SelectionChangedCause cause) { |
|
|
|
|
|
|
|
if (value == textEditingValue) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
textEditingValue = value; |
|
|
|
|
|
|
|
userUpdateTextEditingValue(value, cause); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// keyboard and text input force a selection completion |
|
|
|
|
|
|
|
_handleSelectionCompleted(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
|
|
|
|
void debugAssertLayoutUpToDate() { |
|
|
|
|
|
|
|
renderEditor.debugAssertLayoutUpToDate(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Shows the selection toolbar at the location of the current cursor. |
|
|
|
/// Shows the selection toolbar at the location of the current cursor. |
|
|
|
/// |
|
|
|
/// |
|
|
|
/// Returns `false` if a toolbar couldn't be shown, such as when the toolbar |
|
|
|
/// Returns `false` if a toolbar couldn't be shown, such as when the toolbar |
|
|
@ -885,8 +868,7 @@ class RawEditorState extends EditorState |
|
|
|
widget.controller.copiedImageUrl = null; |
|
|
|
widget.controller.copiedImageUrl = null; |
|
|
|
_pastePlainText = widget.controller.getPlainText(); |
|
|
|
_pastePlainText = widget.controller.getPlainText(); |
|
|
|
_pasteStyle = widget.controller.getAllIndividualSelectionStyles(); |
|
|
|
_pasteStyle = widget.controller.getAllIndividualSelectionStyles(); |
|
|
|
// Copied straight from EditableTextState |
|
|
|
|
|
|
|
super.copySelection(cause); |
|
|
|
|
|
|
|
if (cause == SelectionChangedCause.toolbar) { |
|
|
|
if (cause == SelectionChangedCause.toolbar) { |
|
|
|
bringIntoView(textEditingValue.selection.extent); |
|
|
|
bringIntoView(textEditingValue.selection.extent); |
|
|
|
hideToolbar(false); |
|
|
|
hideToolbar(false); |
|
|
@ -911,8 +893,6 @@ class RawEditorState extends EditorState |
|
|
|
_pastePlainText = widget.controller.getPlainText(); |
|
|
|
_pastePlainText = widget.controller.getPlainText(); |
|
|
|
_pasteStyle = widget.controller.getAllIndividualSelectionStyles(); |
|
|
|
_pasteStyle = widget.controller.getAllIndividualSelectionStyles(); |
|
|
|
|
|
|
|
|
|
|
|
// Copied straight from EditableTextState |
|
|
|
|
|
|
|
super.cutSelection(cause); |
|
|
|
|
|
|
|
if (cause == SelectionChangedCause.toolbar) { |
|
|
|
if (cause == SelectionChangedCause.toolbar) { |
|
|
|
bringIntoView(textEditingValue.selection.extent); |
|
|
|
bringIntoView(textEditingValue.selection.extent); |
|
|
|
hideToolbar(); |
|
|
|
hideToolbar(); |
|
|
@ -938,9 +918,6 @@ class RawEditorState extends EditorState |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Copied straight from EditableTextState |
|
|
|
|
|
|
|
super.pasteText(cause); // ignore: unawaited_futures |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (cause == SelectionChangedCause.toolbar) { |
|
|
|
if (cause == SelectionChangedCause.toolbar) { |
|
|
|
bringIntoView(textEditingValue.selection.extent); |
|
|
|
bringIntoView(textEditingValue.selection.extent); |
|
|
|
hideToolbar(); |
|
|
|
hideToolbar(); |
|
|
@ -949,8 +926,6 @@ class RawEditorState extends EditorState |
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
@override |
|
|
|
void selectAll(SelectionChangedCause cause) { |
|
|
|
void selectAll(SelectionChangedCause cause) { |
|
|
|
// Copied straight from EditableTextState |
|
|
|
|
|
|
|
super.selectAll(cause); |
|
|
|
|
|
|
|
if (cause == SelectionChangedCause.toolbar) { |
|
|
|
if (cause == SelectionChangedCause.toolbar) { |
|
|
|
bringIntoView(textEditingValue.selection.extent); |
|
|
|
bringIntoView(textEditingValue.selection.extent); |
|
|
|
} |
|
|
|
} |
|
|
@ -959,18 +934,6 @@ class RawEditorState extends EditorState |
|
|
|
@override |
|
|
|
@override |
|
|
|
bool get wantKeepAlive => widget.focusNode.hasFocus; |
|
|
|
bool get wantKeepAlive => widget.focusNode.hasFocus; |
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
|
|
|
|
bool get obscureText => false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
|
|
|
|
bool get selectionEnabled => widget.enableInteractiveSelection; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
|
|
|
|
bool get readOnly => widget.readOnly; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
|
|
|
|
TextLayoutMetrics get textLayoutMetrics => renderEditor; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override |
|
|
|
@override |
|
|
|
AnimationController get floatingCursorResetController => |
|
|
|
AnimationController get floatingCursorResetController => |
|
|
|
_floatingCursorResetController; |
|
|
|
_floatingCursorResetController; |
|
|
|