start method

Future<void> start()

Starts the isolate and sets up communication.

Waits for the isolate to be ready before returning.

Implementation

Future<void> start() async {
  final completer = Completer<SendPort>();

  _subscription = _receivePort.listen((dynamic message) async {
    if (message is SendPort) {
      _sendPort = message;
      completer.complete(message);
    } else if (message is Map<String, dynamic>) {
      final id = message['messageId'] as String;
      _completers.remove(id)?.complete(message['result']);
      _eventController.add(IsolateWorkerEvent(IsolateWorkerEventType.done, {
        'worker': _tag,
        'messageId': id,
        'result': message['result'],
      }));
    }
  });

  _isolate = await Isolate.spawn(_entryPoint, _receivePort.sendPort);

  await completer.future;
}