1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- library flowy_plugin;
- import 'package:app_flowy/startup/plugin/plugin.dart';
- import 'package:app_flowy/startup/startup.dart';
- import 'package:app_flowy/workspace/presentation/home/home_stack.dart';
- import 'package:flowy_infra/notifier.dart';
- import 'package:flowy_sdk/protobuf/flowy-folder/view.pb.dart';
- import 'package:flutter/widgets.dart';
- export "./src/sandbox.dart";
- enum PluginType {
- editor,
- blank,
- trash,
- grid,
- board,
- }
- // extension FlowyDefaultPluginExt on DefaultPlugin {
- // int type() {
- // switch (this) {
- // case DefaultPlugin.editor:
- // return 0;
- // case DefaultPlugin.blank:
- // return 1;
- // case DefaultPlugin.trash:
- // return 2;
- // case DefaultPlugin.grid:
- // return 3;
- // case DefaultPlugin.board:
- // return 4;
- // }
- // }
- // }
- // typedef PluginType = int;
- typedef PluginId = String;
- abstract class Plugin {
- PluginId get id;
- PluginDisplay get display;
- PluginType get ty;
- void dispose() {}
- }
- abstract class PluginBuilder {
- Plugin build(dynamic data);
- String get menuName;
- PluginType get pluginType;
- ViewDataTypePB get dataType => ViewDataTypePB.Text;
- ViewLayoutTypePB? get subDataType => null;
- }
- abstract class PluginConfig {
- // Return false will disable the user to create it. For example, a trash plugin shouldn't be created by the user,
- bool get creatable => true;
- }
- abstract class PluginDisplay<T> with NavigationItem {
- List<NavigationItem> get navigationItems;
- PublishNotifier<T>? get notifier => null;
- Widget buildWidget();
- }
- void registerPlugin({required PluginBuilder builder, PluginConfig? config}) {
- getIt<PluginSandbox>()
- .registerPlugin(builder.pluginType, builder, config: config);
- }
- Plugin makePlugin({required PluginType pluginType, dynamic data}) {
- final plugin = getIt<PluginSandbox>().buildPlugin(pluginType, data);
- return plugin;
- }
- List<PluginBuilder> pluginBuilders() {
- final pluginBuilders = getIt<PluginSandbox>().builders;
- final pluginConfigs = getIt<PluginSandbox>().pluginConfigs;
- return pluginBuilders.where(
- (builder) {
- final config = pluginConfigs[builder.pluginType]?.creatable;
- return config ?? true;
- },
- ).toList();
- }
- enum FlowyPluginException {
- invalidData,
- }
|