SIT-board中的核心白板模块完整的实现了一套插件化解决方案。扩展新增图元无需到处修改代码,可直接扩展新插件并注册即可,完美地符合的开闭原则。
在文件夹/component/board/plugins中存放了各个图元插件。
白板中的各种元素,如矩形,椭圆,图片,富文本文档,自由画板均作为一个个白板插件实现的。
插件接口定义在/component/board/model/model_plugin_interface.dart中
abstract class BoardModelPluginInterface {
// 模型类型名,要求不可与其他插件名冲突
String get modelTypeName;
// 在右键菜单中显示的名称
String get inMenuName;
// 模型View的Widget构造
Widget buildModelView(Model model, EventBus<BoardEventName> eventBus);
// 模型编辑器的Widget构造
Widget buildModelEditor(Model model, EventBus<BoardEventName> eventBus);
// 右键菜单创建出的模型的默认构造
Model buildDefaultAddModel({
required int modelId,
required Offset position,
});
}
在/component/plugins/plugins.dart中注册所有的插件,即可轻松新增一个图元
final defaultModelPlugins = BoardModelPluginManager(
initialPlugins: [
RectModelPlugin(), // 矩形
LineModelPlugin(), // 直线
OvalModelPlugin(), // 椭圆
ImageModelPlugin(), // 图像
AttachmentModelPlugin(), // 附件
FreeStyleModelPlugin(), // 自由画板
HtmlModelPlugin(), // HTML文档
MarkdownModelPlugin(), // Markdown文档
],
);