elementAt method
- int index
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) {
RangeError.checkNotNegative(index, "index");
_Future<T> result = new _Future<T>();
int elementIndex = 0;
StreamSubscription<T> subscription;
subscription = this.listen(
null,
onError: result._completeError,
onDone: () {
result._completeError(
new IndexError.withLength(
index,
elementIndex,
indexable: this,
name: "index",
),
StackTrace.empty,
);
},
cancelOnError: true,
);
subscription.onData((T value) {
if (index == elementIndex) {
_cancelAndValue(subscription, result, value);
return;
}
elementIndex += 1;
});
return result;
}