loadExtension method

  1. @override
void loadExtension(
  1. AffogatoAPI api
)
override

Implementation

@override
void loadExtension(AffogatoAPI api) {
  // Need to
  /**
   * TODO:
   *  2. handle bracket wrapping by keeping track of previous [TextSelection] in EditingContext
   */
  api.editor.keyEventsStream.listen((event) {
    if (event.keyEvent is KeyDownEvent || event.keyEvent is KeyRepeatEvent) {
      if (triggerChars.containsKey(event.keyEvent.character)) {
        final String newText = event.editingContext.selection
                .textBefore(event.editingContext.content) +
            triggerChars[event.keyEvent.character]! +
            event.editingContext.selection
                .textAfter(event.editingContext.content);
        api.vfs.documentRequestChange(
          VFSDocumentRequestChangeEvent(
            entityId: api.workspace.workspaceConfigs.entitiesLocation.entries
                .firstWhere((entry) => entry.value.$1 == event.instanceId)
                .key,
            editorAction: EditorAction(
              editingValue: TextEditingValue(
                text: newText,
                selection: event.editingContext.selection,
              ),
            ),
            originId: name,
          ),
        );
      } else if (event.keyEvent.logicalKey == LogicalKeyboardKey.backspace &&
          event.editingContext.selection.start <
              event.editingContext.content.length) {
        final String char = event
            .editingContext.content[event.editingContext.selection.start];
        if (triggerChars.containsValue(char)) {
          final String newText = event.editingContext.selection
                  .textBefore(event.editingContext.content) +
              event.editingContext.selection
                  .textAfter(event.editingContext.content)
                  .substring(1);
          api.vfs.documentRequestChange(
            VFSDocumentRequestChangeEvent(
              originId: name,
              entityId: api
                  .workspace.workspaceConfigs.entitiesLocation.entries
                  .firstWhere((entry) => entry.value.$1 == event.instanceId)
                  .key,
              editorAction: EditorAction(
                editingValue: TextEditingValue(
                  text: newText,
                  selection: event.editingContext.selection,
                ),
              ),
            ),
          );
        }
      }
    }
  });
}