FluentPluginRegistry constructor
FluentPluginRegistry(
- Iterable<
FluentEditorPlugin> source
Implementation
FluentPluginRegistry(Iterable<FluentEditorPlugin> source)
: plugins = _sortAndValidatePlugins(source.toList()),
_nodes = {},
_nodeClasses = {},
_commands = {},
_formats = {},
_ui = [] {
for (final plugin in plugins) {
if (plugin.apiVersion != fluentPluginApiVersion) {
throw StateError(
'Plugin ${plugin.id} requires API ${plugin.apiVersion}, supported API is $fluentPluginApiVersion',
);
}
for (final node in plugin.nodes) {
_putUnique(_nodes, node.type, node, 'node type', plugin.id);
_putUnique(_nodeClasses, node.nodeClass, node, 'node class', plugin.id);
}
for (final command in plugin.commands) {
_putUnique(_commands, command.id, command, 'command', plugin.id);
}
for (final format in plugin.formats) {
_putUnique(_formats, format.id, format, 'format', plugin.id);
}
for (final contribution in plugin.ui) {
if (_ui.any((item) => item.id == contribution.id)) {
throw StateError(
'Duplicate UI contribution ${contribution.id} from plugin ${plugin.id}',
);
}
_ui.add(contribution);
}
}
_validateKeyBindings();
_ui.sort((a, b) {
final location = a.location.index.compareTo(b.location.index);
return location != 0 ? location : a.order.compareTo(b.order);
});
_styleHooksCache = plugins.map((p) => p.styleHook).whereType<RenderStyleHook>().toList();
}