StreamController в Dart
Когда источник не список и не async*,
данные пишут в StreamController. Метод
add кладет элемент, свойство
stream отдает одноразовый поток для
подписчиков, close завершает выдачу.
Минимальная схема - создать контроллер, отправить число и прочитать его:
import 'dart:async';
void main() async {
StreamController<int> controller = StreamController<int>();
controller.add(1);
Stream<int> stream = controller.stream;
await for (int n in stream) {
print(n);
}
controller.close();
}
В консоли 1. Пока контроллер открыт,
можно вызывать add снова; после
close новые элементы не принимаются.
Несколько значений уходят в том порядке, в каком их добавили:
import 'dart:async';
void main() async {
StreamController<String> controller = StreamController<String>();
controller.add('S');
controller.add('M');
controller.add('L');
controller.stream.listen((String tag) {
print(tag);
});
controller.close();
}
Три метки печатаются подряд. Контроллер без
флага broadcast допускает одного
слушателя на stream.
Создайте StreamController<int>,
отправьте числа 10 и 20,
прочитайте поток через await for и
закройте контроллер.
Через контроллер передайте строки "on"
и "off", подключите listen с
печатью каждой метки и вызовите close.