stream_isolate 0.2.0 stream_isolate: ^0.2.0 copied to clipboard
A utility wrapper class for working with isolates using stream-powered intercommunication.
A wrapper class for Isolate
that exposes a communication channel using a Stream
.
API Reference #
Basic Usage #
To use, call StreamIsolate.spawn
with the same types of arguments passed to Isolate.spawn
. You can then use the returned instance to subscribe to events published by the isolate:
final streamIsolate = await StreamIsolate.spawn(doWork);
await for (final i in streamIsolate.stream) {
print(i);
}
Stream<int> doWork() async* {
yield 1;
yield 2;
yield 3;
yield 4;
yield 5;
}
Bidirectional Communication #
You can also call BidirectionalStreamIsolate.spawn
(or StreamIsolate.spawnBidirectional
) to create an isolate that exposes an additional communication stream for sending messages to the instance:
final streamIsolate = await BidirectionalStreamIsolate.spawn(doWork);
await for (final i in streamIsolate.stream) {
print(i);
streamIsolate.send('received');
}
Stream<int> doWorkWithListener(Stream<String> inc) async* {
inc.listen((msg) => print('from main: $msg'));
yield 1;
yield 2;
yield 3;
yield 4;
yield 5;
}
Passing Initial Arguments #
You can optionally send an argument that gets passed to the thread function when it first runs. This is done using the StreamIsolate.spawnWithArgument
and BidirectionalStreamIsolate.spawnWithArgument
methods.
class IsolateArgs {
final int index;
final String name;
const IsolateArgs(this.index, this.name);
}
...
final args = IsolateArgs(1, 'Worker Isolate 1');
final streamIsolate = await StreamIsolate.spawnWithArgument(doWork, argument: args);
await for (final i in streamIsolate.stream) {
print(i);
streamIsolate.send('received');
}
Stream<int> doWorkWithListener(Stream<String> inc, IsolateArgs args) async* {
print('Starting worker isolate ${args.name}, Index: ${args.index}');
yield 1;
yield 2;
yield 3;
yield 4;
yield 5;
}
Examples #
- Vanilla - A simple example of using stream isolates.
- RxDart - An example of using RxDart to manage the isolate streams.
- Multithreaded Noise - An example of a Flutter app using stream isolates to generate animated Perlin Noise.