Skip to content

Instantly share code, notes, and snippets.

@gladimdim
Created December 13, 2021 12:46
Show Gist options
  • Save gladimdim/60874f264cd59691e514735a7b88d7b8 to your computer and use it in GitHub Desktop.
Save gladimdim/60874f264cd59691e514735a7b88d7b8 to your computer and use it in GitHub Desktop.
class JsonParserIsolate {
final String input;
JsonParserIsolate(this.input);
Future parseJson({Function(String)? onError}) async {
final completer = Completer();
var port = ReceivePort();
var errorPort = ReceivePort();
await Isolate.spawn(_parse, port.sendPort, onError: errorPort.sendPort);
errorPort.listen((message) {
if (onError != null) {
// first is Error Message
// second is stacktrace which is not needed
List errors = message as List;
errorPort.close();
onError(errors.first);
}
});
port.listen((message) {
port.close();
completer.complete(message);
});
return completer.future;
}
Future<void> _parse(SendPort p) async {
final json = jsonDecode(input);
Isolate.exit(p, json);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment