StreamController
단일의 스트림을 만들고 다른 클래스가 이를 listen 할 수 있게하고 stream 을 통해 이벤트를 push 하는데 사용된다.
컨트롤러는
•
데이터 전송
•
에러 전송
•
이벤트 종료
등등을 할수 있게 해준다.
HOW TO USE
1. StreamContoller 인스턴스 생성 (이벤트 송신부)
final photoStreamController = StreamController<List<Photo>>()..add([]);
Stream<List<Photo>> get photoStream = photoStreamController.stream;
Dart
복사
2. StreamBuilder 에 연결 (이벤트 수신부 = Widget)
StreamBuilder(
stream: photoStream,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
final photos = snapshot.data!;
return // photos를 사용해서 Widget 을 그려주면 된다.
},
)
Dart
복사
HOW TO 데이터 전송(발행)
add, addStream
streamController.add(999);
final stream = Stream<int>.periodic(
const Duration(milliseconds: 200), (count) => count * count).take(4);
await streamController.addStream(stream);
Dart
복사
HOW TO 에러 전송
streamController.addError(Exception('Issue 101'));
await streamController.addStream(Stream.error(Exception('Issue 404')));
Dart
복사
HOW TO 구독 취소
메모리 누수를 방지하기 위해 구독을 취소할 수 있다.
await streamController.close();
isClosed = streamController.isClosed; // true
Dart
복사