Я подозреваю, что в моем понимании Stream
s в Dart могут быть несколько дыр ...
У меня есть ситуация, в которой я хотел бы, чтобы приложение Dart реагировало на прерывистый ввод (что сразу же предполагает использование Streams
с - или Future
с, возможно). Я могу реализовать желаемое поведение с помощью listener функций, но мне было интересно, как это сделать лучше, более Dart esque .
В качестве простого примера следующая (рабочая) программа прослушивает ввод с клавиатуры пользователем и добавляет элемент 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
, который я слушаю (в приведенном выше примере, создать новый Stream
из onKeyDown
) , Другими словами, я мог бы изложить программу выше как:
var myStream = ...
myStream.listen(showInput);
Я подозреваю, что есть способ создать Stream
, а затем, в разное время и в разных местах, вставлять в него элементы или призывать его выдавать значение: мне кажется, что я упускаю что-то простое. В любом случае, любая помощь или направление к документации будут оценены.