Какие способы создания изолятов в Dart/Flutter ты знаешь?

«Какие способы создания изолятов в Dart/Flutter ты знаешь?» — вопрос из категории Асинхронность, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Dart/Flutter есть несколько способов создания изолятов для параллельных вычислений:

1. Isolate.spawn() — базовый низкоуровневый способ с ручным управлением портами:

void isolateFunction(String message) {
  print('Isolate: $message');
}

final isolate = await Isolate.spawn(isolateFunction, 'Hello');

2. compute() — упрощённый API для одноразовых задач, автоматически сериализующий данные:

int heavyCalculation(int n) => n * n;
final result = await compute(heavyCalculation, 42);

3. Isolate.run() (Dart 2.19+) — современный рекомендуемый способ для изолированных задач:

final result = await Isolate.run(() => heavyComputation());

4. FlutterIsolate из пакета flutter_isolate — для изолятов, которым нужен доступ к платформенным каналам (например, для работы с плагинами):

final isolate = await FlutterIsolate.spawn(myIsolateFunction);

Ключевые отличия:

  • compute и Isolate.run скрывают сложность передачи данных через порты.
  • Isolate.spawn даёт полный контроль, но требует ручной настройки SendPort/ReceivePort.
  • FlutterIsolate необходим, если в изоляте нужно использовать плагины или вызывать платформенный код.