[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, 3
Rx.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 1
Rx.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, 1
Rx.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 terminates
Rx.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 3
Rx.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
을 출력한다. (나머지 스트림은 무시되는 듯하다.)