Метод close
Метод close класса StreamController закрывает
контроллер потока. После вызова этого метода в поток
больше нельзя добавлять новые данные через add
или addError. Метод возвращает Future,
который завершается, когда все подписчики получат
уведомление о закрытии потока. Метод не принимает
параметров.
Синтаксис
controller.close()
Пример
Давайте создадим контроллер, добавим в него несколько значений, а затем закроем поток:
import 'dart:async';
void main()
{
StreamController<int> controller = StreamController<int>();
controller.stream.listen(
(int value) => print(value),
onDone: () => print('Stream closed'),
);
controller.add(1);
controller.add(2);
controller.add(3);
controller.close();
}
Результат выполнения кода:
1
2
3
"Stream closed"
Пример
Давайте проверим, что после закрытия потока добавление данных вызывает ошибку:
import 'dart:async';
void main()
{
StreamController<int> controller = StreamController<int>();
controller.stream.listen(
(int value) => print(value),
onDone: () => print('Stream closed'),
);
controller.add(1);
controller.close();
controller.add(2);
}
Результат выполнения кода:
1
"Stream closed"
Unhandled exception:
Bad state: Cannot add new events after calling close
Пример
Давайте дождемся завершения метода close
с помощью await и выведем сообщение
после закрытия потока:
import 'dart:async';
void main() async
{
StreamController<int> controller = StreamController<int>();
controller.stream.listen(
(int value) => print(value),
onDone: () => print('Stream closed'),
);
controller.add(1);
controller.add(2);
await controller.close();
print('Close completed');
}
Результат выполнения кода:
1
2
"Stream closed"
"Close completed"
Смотрите также
-
класс
StreamController,
который управляет потоком данных -
метод
add,
который добавляет данные в поток -
метод
addError,
который добавляет ошибку в поток -
свойство
stream,
которое возвращает поток контроллера