# FutureOr<T> class

A type representing values that are either `Future<T>` or `T`.

This class declaration is a public stand-in for an internal future-or-value generic type. References to this class are resolved to the internal type.

It is a compile-time error for any class to extend, mix in or implement `FutureOr`.

Note: the `FutureOr<T>` type is interpreted as `dynamic` in non strong-mode.

# Examples

    // The `Future<T>.then` function takes a callback [f] that returns either
    // an `S` or a `Future<S>`.
    Future<S> then<S>(FutureOr<S> f(T x), ...);

    // `Completer<T>.complete` takes either a `T` or `Future<T>`.
    void complete(FutureOr<T> value);

# Advanced

The `FutureOr<int>` type is actually the "type union" of the types `int` and `Future<int>`. This type union is defined in such a way that `FutureOr<Object>` is both a super- and sub-type of `Object` (sub-type because `Object` is one of the types of the union, super-type because `Object` is a super-type of both of the types of the union). Together it means that `FutureOr<Object>` is equivalent to `Object`.

As a corollary, `FutureOr<Object>` is equivalent to `FutureOr<FutureOr<Object>>`, `FutureOr<Future<Object>>` is equivalent to `Future<Object>`.

## Properties

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

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