launch method
Spawns an isolate and initializes it for bidirectional communication.
Implementation
@MainIsolate()
Future launch() async {
var dataReceiver = ReceivePort("dataSrc");
var events = dataReceiver.asBroadcastStream();
var callbackReceiver = ReceivePort("callback");
var callbacks = callbackReceiver.asBroadcastStream();
var initialCallbackFuture = callbacks.first;
callbacks.skip(1).first.then((_) {
dataReceiver.close();
callbackReceiver.close();
});
var isolate = await Isolate.spawn(
aqueductEntrypoint,
AqueductInitArgs(
dataReceiver.sendPort, callbackReceiver.sendPort, this));
AqueductCallback callback = await initialCallbackFuture;
var dataPort = callback.dataPort;
isolate.addOnExitListener(callbackReceiver.sendPort);
var context =
AqueductContext(isolate, events, dataPort, null, dataReceiver);
contextRaw = context;
if (_isTerminated) terminate();
mainRun();
}