sandbox.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import 'dart:collection';
  2. import 'package:flutter/services.dart';
  3. import '../plugin.dart';
  4. import 'runner.dart';
  5. class PluginSandbox {
  6. final LinkedHashMap<PluginType, PluginBuilder> _pluginBuilders = LinkedHashMap();
  7. final Map<PluginType, PluginConfig> _pluginConfigs = <PluginType, PluginConfig>{};
  8. late PluginRunner pluginRunner;
  9. PluginSandbox() {
  10. pluginRunner = PluginRunner();
  11. }
  12. int indexOf(PluginType pluginType) {
  13. final index = _pluginBuilders.keys.toList().indexWhere((ty) => ty == pluginType);
  14. if (index == -1) {
  15. throw PlatformException(code: '-1', message: "Can't find the flowy plugin type: $pluginType");
  16. }
  17. return index;
  18. }
  19. Plugin buildPlugin(PluginType pluginType, dynamic data) {
  20. final plugin = _pluginBuilders[pluginType]!.build(data);
  21. return plugin;
  22. }
  23. void registerPlugin(PluginType pluginType, PluginBuilder builder, {PluginConfig? config}) {
  24. if (_pluginBuilders.containsKey(pluginType)) {
  25. throw PlatformException(code: '-1', message: "$pluginType was registered before");
  26. }
  27. _pluginBuilders[pluginType] = builder;
  28. if (config != null) {
  29. _pluginConfigs[pluginType] = config;
  30. }
  31. }
  32. List<int> get supportPluginTypes => _pluginBuilders.keys.toList();
  33. List<PluginBuilder> get builders => _pluginBuilders.values.toList();
  34. Map<PluginType, PluginConfig> get pluginConfigs => _pluginConfigs;
  35. }