sandbox.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 =
  7. LinkedHashMap();
  8. final Map<PluginType, PluginConfig> _pluginConfigs =
  9. <PluginType, PluginConfig>{};
  10. late PluginRunner pluginRunner;
  11. PluginSandbox() {
  12. pluginRunner = PluginRunner();
  13. }
  14. int indexOf(PluginType pluginType) {
  15. final index =
  16. _pluginBuilders.keys.toList().indexWhere((ty) => ty == pluginType);
  17. if (index == -1) {
  18. throw PlatformException(
  19. code: '-1', message: "Can't find the flowy plugin type: $pluginType");
  20. }
  21. return index;
  22. }
  23. Plugin buildPlugin(PluginType pluginType, dynamic data) {
  24. final plugin = _pluginBuilders[pluginType]!.build(data);
  25. return plugin;
  26. }
  27. void registerPlugin(PluginType pluginType, PluginBuilder builder,
  28. {PluginConfig? config}) {
  29. if (_pluginBuilders.containsKey(pluginType)) {
  30. throw PlatformException(
  31. code: '-1', message: "$pluginType was registered before");
  32. }
  33. _pluginBuilders[pluginType] = builder;
  34. if (config != null) {
  35. _pluginConfigs[pluginType] = config;
  36. }
  37. }
  38. List<PluginType> get supportPluginTypes => _pluginBuilders.keys.toList();
  39. List<PluginBuilder> get builders => _pluginBuilders.values.toList();
  40. Map<PluginType, PluginConfig> get pluginConfigs => _pluginConfigs;
  41. }