StreamBuilder는 참 편리하다.
알아서 해주는게 너무도 많은 착한놈이다.
StreamBuilder(
stream: ${스트림},
다만 아쉽게도 하나의 Stream만을 위한 StreamBuilder는 있지만
복수개의 Stream을 반영하는 StreamBuilder는 없다. ㅠㅠ
(multiple_stream_builder가 있긴 함...)
이를 위해선 여러개의 Stream을 하나로 묶어줘야하는데
dart async에
StreamGroup
StreamZip
이 존재 하나 각각 StreamBuilder에 바로적용하기엔 문제가 있다
StreamGroup
-> 두 Stream이 동일 type일 경우에 사용한다.
StreamZip
-> 다른 type도 가능하나 두 stream모두 delta가 있어야 emitting한다
-> 즉 두개중 하나의 stream만 변화 돼었다면 StreamBuilder의 builder가 호출되지 않는다
최종 요소
1. 다양한 type의 복수개의 Stream Observing
2. 하나의 Stream만 변화되도 emitting
이를 위해 RxDart를 사용해 아래와 같이 사용하면 됨.
StreamBuilder(
stream: Rx.combineLatest([
StreamA,
StreamB,
StreamC,
], (values) => values),
.....
...
.
Rx.combineLate가 각 stream의 가장 최근 delta값을 저장하고 있다가
하나의 스트림이라도 변화가 있으면, 그 변화를 반영하여 배열로 emitting 해줌.
stream의 출력을 바꾸고 싶으면 (values) => values 에서 조작 하면 됨
단 모든 stream은
yield value;
yield* StreamController.stream;
형태여야함