Skip to content

IO-Design-Team/isolate_channel

Repository files navigation

isolate_channel

Communication channels for isolates based on Flutter's plugin channels

Features

  • Helper functions to spawn, setup, and connect to isolates
  • Method channels for making method calls to an isolate and receiving the result
  • Event channels for receiving streamed events from an isolate

Usage

In the parent isolate, use the spawnIsolate function to spawn a new isolate and connect to it

final connection = await spawnIsolate(isolateEntryPoint);

In the newly spawned isolate, use the setupIsolate function to set up the isolate for channel communication

void isolateEntryPoint(SendPort send) {
  final connection = setupIsolate(send);
}

Now create communication channels in both isolates

final methodChannel = IsolateMethodChannel('method_channel', connection);
final eventChannel = IsolateEventChannel('event_channel', connection);

Set up handlers for the channels in the newly spawned isolate

methodChannel.setMethodCallHandler((call) {
  switch (call.method) {
    case 'example_method':
      print(call.arguments);
      return 'World!';
    default:
      return call.notImplemented();
  }
});

eventChannel.setStreamHandler(
  IsolateStreamHandler.inline(
    onListen: (arguments, sink) {
      sink.success(arguments);
      sink.error(
        code: 'error',
        message: 'Something went wrong',
        details: 1234,
      );
      sink.endOfStream();
    },
    onCancel: (arguments) => print('Canceled: $arguments'),
  ),
);

Now you can use the channels to communicate

final result = await methodChannel.invokeMethod('example_method', 'Hello');
final stream = eventChannel.receiveBroadcastStream();

And close the connection when you're done

connection.close();

Connect to a running isolate

Pass an isolate's send port to the connectToIsolate function to connect to it. A send port can be retrieved from an IsolateNameServer.

final connection = connectToIsolate(send);

About

Communication channels for isolates based on Flutter's plugin channels

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages