# Completer<T> class

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

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

    new 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 {
      Completer _completer = new Completer();

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

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

      // If something goes wrong, call this.
      void _errorHappened(error) {
        _completer.completeError(error);
      }
    }

## Constructors

Completer()
  Creates a new completer. [...]
  factory
Completer.sync()
  Completes the future synchronously. [...]
  factory

## Properties

future → Future<T>
  The future that is completed by this completer. [...]
  read-only
isCompleted → bool
  Whether the future has been completed. [...]
  read-only
hashCode → int
  The hash code for this object. [...]
  read-only, inherited
runtimeType → Type
  A representation of the runtime type of the object.
  read-only, inherited

## Methods

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 non-existent method or property is accessed. [...]
  inherited
toString() → String
  Returns a string representation of this object.
  inherited

## Operators

operator ==(dynamic other) → bool
  The equality operator. [...]
  inherited