handleMessage method
Implementation
@override
void handleMessage(MessageToIsolate message) {
debugMessage(() => '[${Isolate.current.debugName}] $message');
if (message is CreateBlocMessageToIsolate) {
final bloc = message.createBloc();
final subscription = bloc.stream.listen((state) {
message.toMainSendPort.send(state);
});
_subscriptions[message.uniqueKey] = subscription;
_blocs[message.uniqueKey] = bloc;
final port = ReceivePort();
message.toMainSendPort.send(SendPortMessageToMain(sendPort: port.sendPort));
final fromMainSubsription = port.listen((message) {
debugMessage(() => '[${Isolate.current.debugName}] $message');
if (message is EventMessageToIsolate) {
print(message.event);
bloc.add(message.event);
}
});
_fromMainSubscriptions[message.uniqueKey] = fromMainSubsription;
}
if (message is CloseBlocMessageToIsolate) {
_subscriptions[message.key]?.cancel();
_subscriptions.remove(message.key);
_fromMainSubscriptions[message.key]?.cancel();
_fromMainSubscriptions.remove(message.key);
_blocs[message.key]?.close();
_blocs.remove(message.key);
}
if (message is CallableMessageToIsolate) {
message();
}
}