handleMessage method

  1. @override
void handleMessage(
  1. MessageToIsolate message
)
override

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();
  }
}