loadExtension method
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,
),
),
),
);
}
}
}
});
}