every方法

Future<bool> every(
  1. bool test(
    1. T element
    )
)

检查此流提供的所有元素是否都被test接受。

对这一流的每个元素调用test。如果返回值为false,返回的future将完成,并停止处理。

如果这一流结束而没有找到被test拒绝的元素,返回的future将以true结束。

如果这一流发出错误,或者调用test时抛出异常,返回的future将使用该错误完成,并停止处理。

示例

final result =
    await Stream.periodic(const Duration(seconds: 1), (count) => count)
        .take(15)
        .every((x) => x <= 5);
print(result); // false

实现

Future<bool> every(bool test(T element)) {
  _Future<bool> future = new _Future<bool>();
  StreamSubscription<T> subscription =
      this.listen(null, onError: future._completeError, onDone: () {
    future._complete(true);
  }, cancelOnError: true);
  subscription.onData((T element) {
    _runUserCode(() => test(element), (bool isMatch) {
      if (!isMatch) {
        _cancelAndValue(subscription, future, false);
      }
    }, _cancelAndErrorClosure(subscription, future));
  });
  return future;
}