callAsync method
Implementation
Future<Uint8List> callAsync(String name, Uint8List payload) async {
final port = ReceivePort();
final completer = Completer<Uint8List>();
try {
final isolate = await Isolate.spawn(
_callBridge,
IsolateArguments(name, payload, port.sendPort),
errorsAreFatal: false,
debugName: '${_libraryName}_isolate',
onError: port.sendPort,
);
port.listen((message) {
try {
if (message is Uint8List) {
completer.complete(message);
} else if (message is List && message.isNotEmpty) {
completer.completeError(message.first ?? "internal error");
} else {
completer.completeError("spawn error");
}
} finally {
port.close();
isolate.kill(priority: Isolate.beforeNextEvent);
}
});
return completer.future;
} catch (e) {
port.close();
throw OpenPGPException("Failed to start isolate: $e");
}
}