[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();
PublishSubject
는 broadcast 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
BehaviorSubject
는 PublishSubject
와 다르게 마지막 데이터
를 가지고 있다가 새로운 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
BehaviorSubject
는 BehaviorSubject
처럼 데이터를 가지고 있다가 새로운 listener
가 생기면 보내준다. 하지만 마지막 데이터가 아니라 여태까지 수신했던 모든 데이터
를 보내준다. (Error
도 똑같다.)
Observable
Observables
은 이제 Rxdart
에서 지원해주지 않는다고 한다. 기본 Stream
에서 사용가능하다고 한다 (Dart 2.6
이상)