飞镖-如何取消中游视频流

时间:2019-11-16 21:38:53

标签: dart stream subscription

我正在尝试在dart中实现linux head命令(和其他命令)的等效功能。

这是我正在做的一个较大项目的一部分,该项目用飞镖壳代替bash。 您可以在这里查看工作:

https://pub.dev/packages/dshell

因此,我正在研究一种通用机制来从文件中读取行。

我要实现的语法如下:

head('lines.txt',行= 5,(行)=> print(line));

在后台,我实现了一个同步File类,该类提供了一种读取行的方法。

我的问题是我正在使用dart openRead方法并将其转换为流,但是我不确定取消对该流的订阅的正确方法:

这是我尝试过的:

  typedef bool CancelableLineAction(String line);

  void read(LineAction lineAction) {
    Stream<List<int>> inputStream = _file.openRead();

    var subscription = utf8.decoder
        .bind(inputStream)
        .transform(const LineSplitter())
        .listen((line) {

        if (lineAction(line) == false)
        {
            //
            // this line won't compile
            ///
            subscription.cancel();
        }
      }
    });
  }

当然,对subscription.cancel()的调用是无效的,因为尚不存在subscription。

那我该如何从监听器中取消订阅?

我唯一能想到的就是让侦听器抛出异常,但这感觉不对。

0 个答案:

没有答案