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_sdk/protobuf/flowy-folder/view.pb.dart';
- import 'package:flutter/widgets.dart';
- export "./src/sandbox.dart";
- enum PluginType {
- editor,
- blank,
- trash,
- grid,
- board,
- }
- typedef PluginId = String;
- abstract class Plugin<T> {
- PluginId get id;
- PluginDisplay get display;
- PluginNotifier? get notifier => null;
- PluginType get ty;
- void dispose() {
- notifier?.dispose();
- }
- }
- abstract class PluginNotifier<T> {
- /// Notify if the plugin get deleted
- ValueNotifier<T> get isDeleted;
- /// Notify if the [PluginDisplay]'s content was changed
- ValueNotifier<int> get isDisplayChanged;
- void dispose() {}
- }
- abstract class PluginBuilder {
- Plugin build(dynamic data);
- String get menuName;
- PluginType get pluginType;
- ViewDataTypePB get dataType => ViewDataTypePB.Text;
- ViewLayoutTypePB? get layoutType => ViewLayoutTypePB.Document;
- }
- 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 with NavigationItem {
- List<NavigationItem> get navigationItems;
- Widget buildWidget(PluginContext context);
- }
- class PluginContext {
- // calls when widget of the plugin get deleted
- final Function(ViewPB, int?) onDeleted;
- PluginContext({required this.onDeleted});
- }
- 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,
- }
|