[flutter] - RxDart : Stream Classes Part1
Stream Classes
2가지 방법을 제공한다.
Stream클레스를 직접인스턴스화하는 방법- Example :
final mergedStream = MergeStream([myFirstStream, mySecondStream]);
- Example :
Rx static factories를 사용하는 방법- Example :
final mergedStream = Rx.merge([myFirstStream, mySecondStream]);
- Example :
각 내용들을 하나씩 알아보자
ConcatStream / Rx.Concat
- Example :
ConcatStream([ Stream.fromIterable([1]), TimerStream(2, Duration(days: 1)), Stream.fromIterable([3]) ]) .listen(print); // prints 1, 2, 3Rx.concat([ Stream.value(1), Rx.timer(2, Duration(days: 1)), Stream.value(3) ]) .listen(print); // prints 1, 2, 3

Concat은 여러개의 Steam을 합치며 그전 Stream이 끝나야 다음 Stream을 진행한다. 한번에 하나의 Stream만 subscribing 진행
ConcatEagerStream / Rx.concatEager
Concat과 전반적인 내용은 같다 하지만 한번에 하나의 Stream만 subscribing 진행하는게 아니라 한번에 모든 Stream을 subscribing한다. 데이터 방출 순서는 똑같다.
DeferStream / Rx.defer
Example :
DeferStream(() => Stream.value(1)).listen(print); //prints 1Rx.defer(() => Stream.value(1)).listen(print); //prints 1
DeferStream은 subscribing이 될때 까지 Stream생성을 기다린다.
기본적으로 단일 구독형이지만 재사용이 가능하다.
MergeStream / Rx.merge
- Example :
MergeStream([ TimerStream(1, Duration(days: 10)), Stream.fromIterable([2]) ]).listen(print); // prints 2, 1Rx.merge([ Rx.timer(1, Duration(days: 10)), Stream.value(2) ]).listen(print); // prints 2, 1

Merge는 여러개 Stream을 하나의 Single Stream Sequence로 합친다. Concat과 다르게 다음 Stream을 기다리는게 아니라 말 그대로 합친다.
NeverStream / Rx.never
Example :
NeverStream().listen(print); // Neither prints nor terminatesRx.never().listen(print); // Neither prints nor terminates
NeverStream은 아무런 값 없이 종료도 하지 않는 Stream입니다. 매우 제한적인 Stream이며 보통 Test용으로 사용됩니다.
RaceStream / Rx.race
Example :
RaceStream([ TimerStream(1, Duration(days: 1)), TimerStream(2, Duration(days: 2)), TimerStream(3, Duration(seconds: 3)) ]).listen(print); // prints 3Rx.race([ Rx.timer(1, Duration(days: 1)), Rx.timer(2, Duration(days: 2)), Rx.timer(3, Duration(seconds: 1)) ]).listen(print); // prints 3
2번 Stream 선택 : 
1번 Stream 선택 : 
RaceStream은 여러개의 Stream중에서 가장 먼저 도착한 Stream을 출력한다. (나머지 스트림은 무시되는 듯하다.)
