12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import 'package:appflowy/plugins/inline_actions/inline_actions_menu.dart';
- import 'package:appflowy/plugins/inline_actions/inline_actions_result.dart';
- import 'package:appflowy/plugins/inline_actions/inline_actions_service.dart';
- import 'package:appflowy_editor/appflowy_editor.dart';
- const inlineActionCharacter = '@';
- CharacterShortcutEvent inlineActionsCommand(
- InlineActionsService inlineActionsService, {
- InlineActionsMenuStyle style = const InlineActionsMenuStyle.light(),
- }) =>
- CharacterShortcutEvent(
- key: 'Opens Inline Actions Menu',
- character: inlineActionCharacter,
- handler: (editorState) => inlineActionsCommandHandler(
- editorState,
- inlineActionsService,
- style,
- ),
- );
- InlineActionsMenuService? selectionMenuService;
- Future<bool> inlineActionsCommandHandler(
- EditorState editorState,
- InlineActionsService service,
- InlineActionsMenuStyle style,
- ) async {
- final selection = editorState.selection;
- if (PlatformExtension.isMobile || selection == null) {
- return false;
- }
- if (!selection.isCollapsed) {
- await editorState.deleteSelection(selection);
- }
- await editorState.insertTextAtPosition(
- inlineActionCharacter,
- position: selection.start,
- );
- final List<InlineActionsResult> initialResults = [];
- for (final handler in service.handlers) {
- final group = await handler();
- if (group.results.isNotEmpty) {
- initialResults.add(group);
- }
- }
- if (service.context != null) {
- selectionMenuService = InlineActionsMenu(
- context: service.context!,
- editorState: editorState,
- service: service,
- initialResults: initialResults,
- style: style,
- );
- selectionMenuService?.show();
- }
- return true;
- }
|