How an I spawn an Isolate blocking on an async function in Flutter?
I tried dart:cli
's waitFor
function, but it seems that dart:cli
does not work together with Flutter.
There is no supported way to block on an async
function.
You shouldn't need an Isolate
to block anyway. Each Isolate
has its own event loop and can just await
the Future
returned by your asynchronous function before calling Isolate.exit
. For example:
import 'dart:isolate';
void foo(SendPort p) async {
for (var i = 0; i < 5; i += 1) {
await Future.delayed(const Duration(seconds: 1));
print('foo: $i');
}
Isolate.exit(p);
}
void main() async {
var p = ReceivePort();
await Isolate.spawn(foo, p.sendPort);
print('Isolate spawned.');
// Wait for the Isolate to complete.
await p.first;
print('Done');
}
which prints:
Isolate spawned.
foo: 0
foo: 1
foo: 2
foo: 3
foo: 4
Done