plugin_kit 0.1.0 copy "plugin_kit: ^0.1.0" to clipboard
plugin_kit: ^0.1.0 copied to clipboard

A powerful plug'n'play plugin system for any Dart project. Lifecycle-aware plugins, scoped services, an event bus, sessions, and runtime configuration.

example/main.dart

// Minimal end-to-end example of plugin_kit. Builds a runtime with two
// plugins, opens a session, resolves a service, and emits an event the
// other plugin handles. Run with `dart run`.
//
// See packages/plugin_kit/README.md and the docs at
// https://plugin-kit.saad-ardati.dev/ for the full guide.

import 'package:plugin_kit/plugin_kit.dart';

class Greeter {
  String greet(String name) => 'Hello, $name!';
}

class UserArrived {
  const UserArrived(this.name);
  final String name;
}

class GreeterPlugin extends SessionPlugin {
  @override
  PluginId get pluginId => const PluginId('greeter');

  @override
  void register(ScopedServiceRegistry registry) {
    registry.registerSingleton<Greeter>(
      const ServiceId('greeter'),
      () => Greeter(),
    );
  }
}

class WelcomePlugin extends SessionPlugin {
  @override
  PluginId get pluginId => const PluginId('welcome');

  @override
  void register(ScopedServiceRegistry registry) {}

  @override
  void attach(SessionPluginContext context) {
    on<UserArrived>(context, (envelope) async {
      final greeter = context.resolve<Greeter>(const ServiceId('greeter'));
      print('[welcome] ${greeter.greet(envelope.event.name)}');
    });
  }
}

Future<void> main() async {
  final runtime = PluginRuntime(plugins: [GreeterPlugin(), WelcomePlugin()])
    ..init();

  final session = await runtime.createSession();

  await session.emit(const UserArrived('Saad'));
  await session.emit(const UserArrived('Ada'));

  await runtime.dispose();
}
2
likes
160
points
207
downloads

Documentation

API reference

Publisher

verified publishersaad-ardati.dev

Weekly Downloads

A powerful plug'n'play plugin system for any Dart project. Lifecycle-aware plugins, scoped services, an event bus, sessions, and runtime configuration.

Homepage
Repository (GitHub)
View/report issues

Topics

#plugins #architecture #event-bus #dependency-injection #lifecycle

License

BSD-3-Clause (license)

Dependencies

collection, logging, meta

More

Packages that depend on plugin_kit