结合 LineSplitter 取消标准输入订阅

Cancel stdin subscription in combination with LineSplitter

我使用 LineSplitter 作为命令行界面,其中每一行都是一个命令:

import "dart:io";
import 'dart:convert';

void main() {
  var sub;

  sub = stdin.transform(UTF8.decoder).transform(new LineSplitter()).listen((l) {
    if (l == "e") {
      sub.cancel();
    }
    print('$l');
  });
}

键入 e 和换行符应退出应用程序,因为订阅已取消。但这并没有发生,相反我必须在标准输入中换行。问题似乎是 LineSplitter,也许它正在等待下一个完整的行,有没有办法 "undo"/"unchain" 转换器以便应用程序退出?

调用 exit 对我来说不是一个选项,因为它会在没有正确清理的情况下立即退出。

我认为 this 问题是相关的,但没有解决。

这是 Windows 上 Dart SDK 中的 io 库的问题,现在应该修复该错误(参见 https://github.com/dart-lang/sdk/issues/22940