我正在尝试在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。
那我该如何从监听器中取消订阅?
我唯一能想到的就是让侦听器抛出异常,但这感觉不对。