【发布时间】:2019-04-07 20:09:39
【问题描述】:
我怀疑我对 Dart 中 Streams 的理解可能有一些漏洞......
我有一种情况,我希望 Dart 应用程序响应间歇性输入(这会立即建议使用 Streamss 或 Futures,也许)。我可以使用 listener 函数实现我想要的行为,但我想知道如何以更好、更 Dartesque 的方式来实现。
作为一个简单的例子,下面的(工作的)程序监听来自用户的键盘输入,并在文档中添加一个 div 元素,该元素包含从前一个空格开始输入的内容,只要按下空格键。
import 'dart:html';
main() {
listenForSpaces(showInput);
}
void listenForSpaces(void Function(String) listener) {
var input = List<String>();
document.onKeyDown.listen((keyboardEvent) {
var key = keyboardEvent.key;
if (key == " ") {
listener(input.join());
input.clear();
} else {
input.add(key.length > 1 ? "[$key]" : key);
}
});
}
void showInput(String message) {
document.body.children.add(DivElement()..text = message);
}
我想做的是从我正在收听的Stream 创建一个新的Stream(在上面的示例中,从onKeyDown 创建一个新的Stream) .换句话说,我可以将上面的程序设置为:
var myStream = ...
myStream.listen(showInput);
我怀疑有一种方法可以创建Stream,然后在不同的时间和地点向其中插入元素或调用它来发出值:感觉好像我错过了一些简单的东西。无论如何,我们将不胜感激对文档的任何帮助或指导。
【问题讨论】: