使用Stream.periodic时如何取消Stream?

时间:2018-07-29 17:54:16

标签: dart

我无法取消使用Stream.periodic构造函数创建的流。以下是我取消流的尝试。但是,我很难从内部作用域中提取“ count”变量。因此,我无法取消订阅。

import 'dart:async';

void main() {
  int count = 0;
  final Stream newsStream = new Stream.periodic(Duration(seconds: 2), (_) {
    return _;
  });

  StreamSubscription mySubscribedStream = newsStream.map((e) {
    count = e;
    print(count);
    return 'stuff $e';
  }).listen((e) {
    print(e);
  });

  // count = 0 here because count is scoped inside mySubscribedStream
  // How do I extract out 'count', so I can cancel the stream?
  if (count > 5) {
    mySubscribedStream.cancel();
    mySubscribedStream = null;
  }
}

1 个答案:

答案 0 :(得分:1)

我宁愿使用take(5)而不是检查> 5然后取消

final Stream newsStream = new Stream.periodic(Duration(seconds: 2), (_)  => count++);

newsStream.map((e) {
    count = e;
    print(count);
    return 'stuff $e';
  }).take(5).forEach((e) {
    print(e);
  });