elementAt 方法
- int index
返回此流第 index
个数据事件的值。
在接收到第 index
个数据事件后,停止监听此流。
内部,此方法在这些元素之后取消其订阅。这意味着单订阅(非广播)流在调用此方法后将被关闭,无法再次使用。
如果在找到值之前发生错误事件,则 future 以此错误完成。
如果在找到值之前发生完成事件,则 future 以一个 RangeError 完成。
实现
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;
}