fix(editor): implement editor shortcut action for home and end keys to fix exception about unimplemented ScrollToDocumentBoundaryIntent

pull/1937/head
Ellet 10 months ago
parent fe6787272a
commit 8fa754dafb
  1. 32
      lib/src/widgets/raw_editor/raw_editor_actions.dart
  2. 15
      lib/src/widgets/raw_editor/raw_editor_state.dart

@ -577,3 +577,35 @@ class QuillEditorInsertEmbedIntent extends Intent {
final Attribute type;
}
class QuillEditorUpdateCursorLocationAction
extends ContextAction<ScrollToDocumentBoundaryIntent> {
QuillEditorUpdateCursorLocationAction(this.state);
final QuillRawEditorState state;
@override
Object? invoke(ScrollToDocumentBoundaryIntent intent,
[BuildContext? context]) {
if (intent.forward) {
return Actions.invoke(
context!,
UpdateSelectionIntent(
state.textEditingValue,
TextSelection.collapsed(
offset: state.controller.plainTextEditingValue.text.length,
),
SelectionChangedCause.keyboard,
),
);
}
return Actions.invoke(
context!,
UpdateSelectionIntent(
state.textEditingValue,
const TextSelection.collapsed(offset: 0),
SelectionChangedCause.keyboard,
),
);
}
}

@ -701,6 +701,18 @@ class QuillRawEditorState extends EditorState
control: !isDesktopMacOS,
meta: isDesktopMacOS,
): const OpenSearchIntent(),
// Navigate to the start or end of the document
SingleActivator(
LogicalKeyboardKey.home,
control: !isDesktopMacOS,
meta: isDesktopMacOS,
): const ScrollToDocumentBoundaryIntent(forward: false),
SingleActivator(
LogicalKeyboardKey.end,
control: !isDesktopMacOS,
meta: isDesktopMacOS,
): const ScrollToDocumentBoundaryIntent(forward: true),
}, {
...?widget.configurations.customShortcuts
}),
@ -1674,7 +1686,8 @@ class QuillRawEditorState extends EditorState
IndentSelectionIntent: _indentSelectionAction,
QuillEditorApplyHeaderIntent: _applyHeaderAction,
QuillEditorApplyCheckListIntent: _applyCheckListAction,
QuillEditorApplyLinkIntent: QuillEditorApplyLinkAction(this)
QuillEditorApplyLinkIntent: QuillEditorApplyLinkAction(this),
ScrollToDocumentBoundaryIntent: QuillEditorUpdateCursorLocationAction(this)
};
@override

Loading…
Cancel
Save