Completer<T> class abstract interface

A way to produce Future objects and to complete them later with a value or error.

Most of the time, the simples t way to create a future is to just use one of the Future constructors to capture the result of a single asynchronous computation:

Future(() { doSomething(); return result; });

or, if the future represents the result of a sequence of asynchronous computations, they can be chained using Future.then or similar functions on Future:

Future doStuff(){
  return someAsyncOperation().then((result) {
    return someOtherAsyncOperation(result);

If you do need to create a Future from scratch — for example, when you're converting a callback-based API into a Future-based one — you can use a Completer as follows:

class AsyncOperation {
  final Completer _completer = new Completer();

  Future<T> doOperation() {
    return _completer.future; // Send future object back to client.

  // Something calls this when the value is ready.
  void _finishOperation(T result) {

  // If something goes wrong, call this.
  void _errorHappened(error) {
  • @vmIsolateUnsendable


Creates a new completer.
Completes the future synchronously.


future Future<T>
The future that is completed by this completer.
no setter
hashCode int
The hash code for this object.
no setterinherited
isCompleted bool
Whether the future has been completed.
no setter
runtimeType Type
A representation of the runtime type of the object.
no setterinherited


complete([FutureOr<T>? value]) → void
Completes future with the supplied values.
completeError(Object error, [StackTrace? stackTrace]) → void
Complete future with an error.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
toString() String
A string representation of this object.


operator ==(Object other) bool
The equality operator.