How to spawn an async function in Flutter?

Viewed 43

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.

2 Answers

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

i can not understand your question. can you elaborate it further more, may be you can provide some code...

Related