Вынес большой разбор JSON с главного изолята через Isolate.run и вместо ускорения получил ошибку про объект, который нельзя отправить. Сам разбор был ни при чём, виновато замыкание.
class Loader {
final updates = StreamController<int>();
List<Object?> _decode(String text) => jsonDecode(text) as List<Object?>;
Future<List<Object?>> parse(String text) {
return Isolate.run(() => _decode(text));
}
}
_decode - метод экземпляра, поэтому замыкание держит this, а this держит StreamController. Всё, до чего дотягивается замыкание, отправляется в новый изолят, а контроллер отправить нельзя. Сделал _decode статическим, и всё заработало. Чего я так и не понял, так это как заметить такое до запуска. Анализатор к коду выше никаких претензий не имеет.