elementAt method
Returns the value of the index
th data event of this stream.
Stops listening to this stream after the index
th data event has been
received.
Internally the method cancels its subscription after these elements. This means that single-subscription (non-broadcast) streams are closed and cannot be reused after a call to this method.
If an error event occurs before the value is found, the future completes with this error.
If a done event occurs before the value is found, the future completes with a RangeError.
Implementation
Future<T> elementAt(int index) {
if (index is! int || index < 0) throw new ArgumentError(index);
_Future<T> future = new _Future<T>();
StreamSubscription subscription;
int elementIndex = 0;
subscription = this.listen(
(T value) {
if (index == elementIndex) {
_cancelAndValue(subscription, future, value);
return;
}
elementIndex += 1;
},
onError: future._completeError,
onDone: () {
future._completeError(
new RangeError.index(index, this, "index", null, elementIndex));
},
cancelOnError: true);
return future;
}