contains 方法

Future<bool> contains(
  1. Object? needle
)

返回 needle 是否出现在此流提供的元素中。

使用 Object.== 将此流的每个元素与 needle 进行比较。如果找到相等的元素,返回的 future 将完成并接收到 true。如果此流结束而没有找到匹配项,future 将用 false 完成。

如果此流发出错误,或者调用 Object.== 抛出异常,则返回的 future 将用那个错误完成,并且处理停止。

示例

final result = await Stream.fromIterable(['Year', 2021, 12, 24, 'Dart'])
    .contains('Dart');
print(result); // true

实现

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