Dart Concurrency and Isolates
Priority: P1 (HIGH)
Core Concepts
Dart uses a single-threaded event loop. All Flutter code runs on the Main Isolate by default. Blocking it causes jank.
- async/await: For non-blocking I/O (network, file). The event loop continues while waiting.
- Isolates: Dart's lightweight threads with isolated memory. Communicate via message passing only.
Decision Matrix
| Condition | Approach |
|---|---|
| I/O bound (HTTP, database) | async/await on Main Isolate |
| CPU-bound, < 16ms | async/await on Main Isolate |
| CPU-bound, one-off heavy task | Isolate.run() |
| Continuous background processing | Isolate.spawn() with ports |
Workflow: Offloading Heavy Computation
-
- Identify the CPU-bound operation blocking the UI.
-
- Extract computation into a standalone top-level or static function.
-
- Ensure the function accepts exactly one argument (Isolate constraint).
-
- Call
Isolate.run(() => myFunction(data)).
- Call
-
awaitthe result on the Main Isolate.
Workflow: Long-Lived Worker Isolate
-
- Create a
ReceivePorton the Main Isolate.
- Create a
-
- Spawn worker with
Isolate.spawn(entryPoint, mainPort.sendPort).
- Spawn worker with
-
- In worker, create its own
ReceivePortand send itsSendPortback.
- In worker, create its own
-
- Store worker's
SendPortfor bidirectional communication.
- Store worker's
-
- Close ports and kill isolate on dispose.
See examples for complete code.
Anti-Patterns
- No JSON parsing on Main Isolate: Large JSON decoding (>1MB) blocks frames. Use
Isolate.run. - No shared mutable state: Isolates cannot share memory. Pass data via messages.
- No FutureBuilder in build without caching:
FutureBuilderre-fires on every rebuild if the future is created inline.
Verification
- No frame drops during heavy computation (check with DevTools).
- Worker isolates are disposed when no longer needed.
-
flutter testpasses.
References
- Isolate Examples
Canonical response anchors
When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant:
- Dart Concurrency and Isolates