Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

Plog

Flutter - rxdart streams 본문

Mobile/Flutter

Flutter - rxdart streams

풍중현 2020. 2. 16. 17:56

rxdart는 dart언어에서 reactive programming을 구현하는데 있어서

여러가지 추가적인 기능들을 제공해준다.

 

rxdart의 구성요소

  • Stream Classes
  • Extension Methods
  • Subjects

 

1. Stream Classes
// ConcatStream 연결 스트림
ConcatStream([
  Stream.fromIterable([1]),
  TimerStream(2, Duration(days: 1)),
  Stream.fromIterable([3])
]).listen(print); // 1, 2, 3 을 출력한다.

 

ConcatStream

 


 

// DeferStream은 리스너가 구독하기 전까지 기다린 다음 팩토리 함수로 스트림을 생성한다.
DeferStream(() => Stream.value(1)).listen(print); // 1 출력

 


 

// MergeStream은 두 스트림을 합친다.
MergeStream([
  TimerStream(1, Duration(days: 10)),
  Stream.fromIterable([2])
]).listen(); // 2, 1 을 출력한다.

MergeStream

 


 

NeverStream().listen(print); // 출력 또는 종료하지 않는다. 종료불가능한, 무한한 지속시간을 나타내는 스트림 시퀀스를 반환한다.

 

 


 

RaceStream([
  TimerStream(1, Duration(days: 1)), // 첫번째 스트림
  TimerStream(2, Duration(days: 2)), // 두번째 스트림
  TimerStream(3, Duration(seconds: 3)) // 세번째 스트림
]).listen(print); // 제일 처음 데이터가 발행되는 세번째 스트림의 모든 아이템만 발행한다.

 


 

RepeatStream((int repeatCount) => 
  Stream.value('repeat index: $repeatCount'), 3)
    .listen((i) => (print(i));
// 'repeat index: 0, repeat index: 1, repeat index: 2' 출력

 


 

RetryStream(() { Stream.fromIterable([1]); })
  .listen((i) => print(i)); // 1 출력
  
RetryStream(() {
  Stream.fromIterable([1])
    .concatWith([ErrorStream(Error())]);
  }, 1)
  .listen(print, onError: (e, s) => print(e));
  
// 다시 시도 x : 1 출력, 에러 다시 시도
// 다시 시도 1 : 1 출력, 에러 다시 시도 횟수가 1번으로 지정되 있으므로 2번 다시시도 하지 않음
// RetryError 출력