Skip to content

Latest commit

 

History

History
100 lines (80 loc) · 3.1 KB

customizing_shortcuts.md

File metadata and controls

100 lines (80 loc) · 3.1 KB

Shortcut events

Note

This feature is supported only on desktop devices.

We will use a simple example to illustrate how to quickly add a CharacterShortcutEvent event.

In this example, text that starts and ends with an asterisk ( * ) character will be rendered in italics for emphasis. So typing *xxx* will automatically be converted into xxx.

Let's start with a empty document:

import 'package:flutter_quill/flutter_quill.dart';
import 'package:flutter/material.dart';

class AsteriskToItalicStyle extends StatelessWidget {
  const AsteriskToItalicStyle({super.key});

  @override
  Widget build(BuildContext context) {
    return QuillEditor.basic(
      controller: <your_controller>,
      config: QuillEditorConfig(
        characterShortcutEvents: [],
      ),
    );
  }
}

At this point, nothing magic will happen after typing *xxx*.

Editor without shortcuts gif

To implement our shortcut event we will create a CharacterShortcutEvent instance to handle an asterisk input.

We need to define key and character in a CharacterShortcutEvent object to customize hotkeys. We recommend using the description of your event as a key. For example, if the asterisk * is defined to make text italic, the key can be 'Asterisk to italic'.

import 'package:flutter_quill/flutter_quill.dart';
import 'package:flutter/material.dart';

// [handleFormatByWrappingWithSingleCharacter] is a example function that contains 
// the necessary logic to replace asterisk characters and apply correctly the 
// style to the text around them 

enum SingleCharacterFormatStyle {
  code,
  italic,
  strikethrough,
}

CharacterShortcutEvent asteriskToItalicStyleEvent = CharacterShortcutEvent(
  key: 'Asterisk to italic',
  character: '*',
  handler: (QuillController controller) => handleFormatByWrappingWithSingleCharacter(
    controller: controller,
    character: '*',
    formatStyle: SingleCharacterFormatStyle.italic,
  ),
);

Now our 'asterisk handler' function is done and the only task left is to inject it into the QuillEditorConfig.

import 'package:flutter_quill/flutter_quill.dart';
import 'package:flutter/material.dart';

class AsteriskToItalicStyle extends StatelessWidget {
  const AsteriskToItalicStyle({super.key});

  @override
  Widget build(BuildContext context) {
    return QuillEditor.basic(
      controller: <your_controller>,
      config: QuillEditorConfig(
        characterShortcutEvents: [
           asteriskToItalicStyleEvent,
        ],
      ),
    );
  }
}

CharacterShortcutEvent asteriskToItalicStyleEvent = CharacterShortcutEvent(
  key: 'Asterisk to italic',
  character: '*',
  handler: (QuillController controller) => handleFormatByWrappingWithSingleCharacter(
    controller: controller,
    character: '*',
    formatStyle: SingleCharacterFormatStyle.italic,
  ),
);

Editor with shortcuts gif