Skip to content

Latest commit

 

History

History
44 lines (37 loc) · 1.51 KB

白板元素插件系统.md

File metadata and controls

44 lines (37 loc) · 1.51 KB

插件系统

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文档
  ],
);