elementAt 方法

Future<T> elementAt(
  1. 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;
}