# listen method

StreamSubscription<T> listen (void onData(T value), { Function onError, void onDone(), bool cancelOnError })

Adds a subscription to this stream.

Returns a StreamSubscription which handles events from the stream using the provided `onData`, `onError` and `onDone` handlers. The handlers can be changed on the subscription, but they start out as the provided functions.

On each data event from this stream, the subscriber's `onData` handler is called. If `onData` is `null`, nothing happens.

On errors from this stream, the `onError` handler is called with the error object and possibly a stack trace.

The `onError` callback must be of type `void onError(error)` or `void onError(error, StackTrace stackTrace)`. If `onError` accepts two arguments it is called with the error object and the stack trace (which could be `null` if the stream itself received an error without stack trace). Otherwise it is called with just the error object. If `onError` is omitted, any errors on the stream are considered unhandled, and will be passed to the current Zone's error handler. By default unhandled async errors are treated as if they were uncaught top-level errors.

If this stream closes and sends a done event, the `onDone` handler is called. If `onDone` is `null`, nothing happens.

If `cancelOnError` is true, the subscription is automatically canceled when the first error event is delivered. The default is `false`.

While a subscription is paused, or when it has been canceled, the subscription doesn't receive events and none of the event handler functions are called.

## Implementation

    StreamSubscription<T> listen(void onData(T value),
        {Function onError, void onDone(), bool cancelOnError}) {
      return _stream.listen(onData,
          onError: onError, onDone: onDone, cancelOnError: cancelOnError);
    }