[flutter] - RxDart : Subject


RxDart : Subject

Rxdart에는 3가지 Subject를 제공해준다.

하나씩 특징을 알아보자


PublishSubject

final subject = PublishSubject<int>();

// observer1 will receive all data and done events
subject.stream.listen(observer1);
subject.add(1);
subject.add(2);

// observer2 will only receive 3 and done event
subject.stream.listen(observe2);
subject.add(3);
subject.close();

PublishSubjectbroadcast StreamController랑 비슷하다. 다른 Subject들과 차이점은 새로운 listener가 생겼을 때 이후 데이터와 에러만 보내준다.


BehaviorSubject

final subject = BehaviorSubject<int>();

subject.add(1);
subject.add(2);
subject.add(3);

subject.stream.listen(print); // prints 3
subject.stream.listen(print); // prints 3
subject.stream.listen(print); // prints 3

BehaviorSubjectPublishSubject와 다르게 마지막 데이터를 가지고 있다가 새로운 listener가 생겼을 때 보내준다. (Error도 똑같다.)


ReplaySubject

final subject = ReplaySubject<int>();

subject.add(1);
subject.add(2);
subject.add(3);

subject.stream.listen(print); // prints 1, 2, 3
subject.stream.listen(print); // prints 1, 2, 3
subject.stream.listen(print); // prints 1, 2, 3

BehaviorSubjectBehaviorSubject 처럼 데이터를 가지고 있다가 새로운 listener가 생기면 보내준다. 하지만 마지막 데이터가 아니라 여태까지 수신했던 모든 데이터를 보내준다. (Error도 똑같다.)


Observable

Observables은 이제 Rxdart에서 지원해주지 않는다고 한다. 기본 Stream에서 사용가능하다고 한다 (Dart 2.6 이상)


다음에는 오픈소스를 수정하며 분석하는 내용으로 RxDart를 공부해보겠다.