Метод add
Метод add класса StreamController добавляет
новые данные в поток. В первый параметр мы передаем
значение, которое нужно отправить в поток. После вызова
метода это значение станет доступно всем слушателям
потока. Если контроллер уже закрыт, вызов метода
приведет к ошибке.
Синтаксис
controller.add(value)
Пример
Давайте создадим контроллер потока и добавим в него
число с помощью метода add:
import 'dart:async';
void main()
{
StreamController controller = StreamController();
controller.stream.listen((value) {
print(value);
});
controller.add(12345);
}
Результат выполнения кода:
12345
Пример
Давайте добавим в поток несколько значений подряд и соберем их в список:
import 'dart:async';
void main()
{
StreamController controller = StreamController();
List res = [];
controller.stream.listen((value) {
res.add(value);
});
controller.add('a');
controller.add('b');
controller.add('c');
Future.delayed(Duration.zero, () {
print(res);
});
}
Результат выполнения кода:
[a, b, c]
Пример
Давайте проверим, что произойдет при попытке добавить данные в закрытый контроллер:
<+dart+>
import 'dart:async';
void main()
{
StreamController controller = StreamController();
controller.stream.listen(
(value) {
print(value);
},
onError: (error) {
print('Error: $error');
}
);
controller.add('abcde');
controller.close();
controller.add('12345');
}
<-dart+>
Результат выполнения кода:
"abcde"
Error: Bad state: Cannot add new events after calling close
Смотрите также
-
класс
StreamController,
который управляет потоком данных -
метод
addError,
который добавляет ошибку в поток -
метод
close,
который закрывает контроллер потока -
свойство
stream,
которое возвращает поток контроллера