如何查看Dart中Stream的结尾?

时间:2014-10-02 05:08:25

标签: dart dart-async

其他飞镖程序员。

我正在使用Stream阅读文件,如下所示。

Stream<List<int>> stream = new File(filepath).openRead();
stream
    .transform(UTF8.decoder)
    .transform(const LineSpilitter())
    .listen((line){
        // TODO: check if this is the last line of the file
        var isLastLine;
    });

我想检查listen()中的行是否是文件的最后一行。

2 个答案:

答案 0 :(得分:3)

我认为你不能检查当前的数据块是否是最后一个 您只能传递关闭流时调用的回调。

Stream<List<int>> stream = new File('main.dart').openRead();
  stream.
  .transform(UTF8.decoder)
  .transform(const LineSpilitter())
  .listen((line) {
// TODO: check if this is the last line of the file
    var isLastLine;
  }
  ,onDone: (x) => print('done')); // <= add a second callback

答案 1 :(得分:0)

@GünterZöchbauer的答案有效时,streams的last属性完全可以满足您的要求(我想飞镖团队在过去5年中添加了此功能)。

Stream<List<int>> stream = new File('main.dart').openRead();
List<int> last = await stream.last;

但是请注意:无法收听流并使用await stream.last

这将导致错误:

StateError(错误状态:流已经被监听。)