Dart Documentationbot_asyncFutureValue<TInput, TOutput>

FutureValue<TInput, TOutput> abstract class

abstract class FutureValue<TInput, TOutput> {
  FutureValue() :
    _outputChangedHandle = new EventHandle<EventArgs>(),
    _inputChangedHandle = new EventHandle<EventArgs>(),
    _errorHandle = new EventHandle<Object>();

  TInput get input => _input;

  void set input(TInput value) {
    _input = value;
    if(_future == null) {
      _startFuture();
    } else {
      _pending = true;
    }
    _inputChangedHandle.fireEvent(EventArgs.empty);
  }

  TOutput get output => _output;

  EventRoot<EventArgs> get outputChanged => _outputChangedHandle;
  EventRoot<EventArgs> get inputChanged => _inputChangedHandle;
  EventRoot get error => _errorHandle;

  abstract Future<TOutput> getFuture(TInput value);

  void _startFuture() {
    assert(_future == null);
    assert(!_pending);
    _future = getFuture(_input);
    _future.handleException(_futureException);
    _future.then(_futureCompleted);
  }

  bool _futureException(Object exception) {
    assert(_future != null);
    _future = null;
    _errorHandle.fireEvent(exception);
    _cleanup();
    return true;
  }

  void _futureCompleted(TOutput value) {
    assert(_future != null);
    _future = null;
    _output = value;
    _outputChangedHandle.fireEvent(EventArgs.empty);
    _cleanup();
  }

  void _cleanup() {
    if(_pending) {
      _pending = false;
      _startFuture();
    }
  }

  TInput _input;
  Future<TOutput> _future;
  TOutput _output;
  bool _pending = false;

  final EventHandle<EventArgs> _outputChangedHandle;
  final EventHandle<EventArgs> _inputChangedHandle;
  final EventHandle<Object> _errorHandle;
}

Subclasses

SendPortValue<TInput, TOutput>

Constructors

new FutureValue() #

FutureValue() :
  _outputChangedHandle = new EventHandle<EventArgs>(),
  _inputChangedHandle = new EventHandle<EventArgs>(),
  _errorHandle = new EventHandle<Object>();

Properties

final EventRoot error #

EventRoot get error => _errorHandle;

TInput input #

TInput get input => _input;
void set input(TInput value) {
  _input = value;
  if(_future == null) {
    _startFuture();
  } else {
    _pending = true;
  }
  _inputChangedHandle.fireEvent(EventArgs.empty);
}

final EventRoot<EventArgs> inputChanged #

EventRoot<EventArgs> get inputChanged => _inputChangedHandle;

final TOutput output #

TOutput get output => _output;

final EventRoot<EventArgs> outputChanged #

EventRoot<EventArgs> get outputChanged => _outputChangedHandle;

final Type runtimeType #

inherited from Object

A representation of the runtime type of the object.

external Type get runtimeType;

Operators

bool operator ==(other) #

inherited from Object

The equality operator.

The default behavior for all Objects is to return true if and only if this and other are the same object.

If a subclass overrides the equality operator it should override the hashCode method as well to maintain consistency.

bool operator ==(other) => identical(this, other);

Methods

new FutureValue() #

FutureValue() :
  _outputChangedHandle = new EventHandle<EventArgs>(),
  _inputChangedHandle = new EventHandle<EventArgs>(),
  _errorHandle = new EventHandle<Object>();

abstract Future<TOutput> getFuture(TInput value) #

int hashCode() #

inherited from Object

Get a hash code for this object.

All objects have hash codes. Hash codes are guaranteed to be the same for objects that are equal when compared using the equality operator ==. Other than that there are no guarantees about the hash codes. They will not be consistent between runs and there are no distribution guarantees.

If a subclass overrides hashCode it should override the equality operator as well to maintain consistency.

external int hashCode();

noSuchMethod(String name, List args) #

inherited from Object

noSuchMethod is invoked when users invoke a non-existant method on an object. The name of the method and the arguments of the invocation are passed to noSuchMethod. If noSuchMethod returns a value, that value becomes the result of the original invocation.

The default behavior of noSuchMethod is to throw a noSuchMethodError.

external Dynamic noSuchMethod(String name, List args);

const Object() #

inherited from Object

Creates a new Object instance.

Object instances have no meaningful state, and are only useful through their identity. An Object instance is equal to itself only.

const Object();

String toString() #

inherited from Object

Returns a string representation of this object.

external String toString();