게시제목
final subject = PublishSubject<int>();
// receive all data and done events (1, 2, 3 모두 출력)
subject.stream.listen(print);
subject.add(1);
subject.add(2);
// only receive 3 and done event (3만 출력)
subject.stream.listen(print);
subject.add(3);
subject.close();
위 코드에서 간단하게 경청자압박으로 주어진다 모든 값을 출력그것은 처음에 명시 경청자기본적으로 1, 2, 3을 보내면 모두 순서대로 출력되어 중간에 주어집니다.
경청자이후 3개만 전송되었으므로 3개만 출력된다.
행동 주제
final subject1 = BehaviorSubject<int>();
subject1.add(1);
subject1.add(2);
subject1.add(3);
subject1.stream.listen(print); // prints 3
subject1.stream.listen(print); // prints 3
subject1.stream.listen(print); // prints 3
final subject2 = BehaviorSubject<int>.seeded(1);
subject2.stream.listen(print); // prints 1
subject2.stream.listen(print); // prints 1
subject2.stream.listen(print); // prints 1
마지막으로 전송된 값만 출력됩니다.
Subject1에서 1,2,3을 주문했는데 리스너는 마지막 값인 3만 출력합니다.
subject2는 시작 값 1만 출력합니다.
위의 개념을 잘 몰랐고 리스트라면 요소를 추가하는 add 와 헷갈렸는데 이 점을 잠시 짚고 넘어가자.
final subject = BehaviorSubject<List<int>>.seeded(());
subject.add((1, 2, 3))
subject.add((4, 5, 6))
위 주제의 값은 (4, 5, 6)입니다.
즉, PublishSubject나 BehaviorSubject를 추가하는 것은 추가하는 개념이 아니라 데이터 값을 밀어주는 느낌입니다.
현재 주제의 가치가있다 테마 값로 확인할 수 있습니다 For List(…subject.value) value 속성이 있는 공식 문서에서 얻을 수 있습니다.
마지막 출력 값을 반환 마지막으로 보낸 값을 반환해야 합니다.
(참조)
https://www.woolha.com/tutorials/rxdart-using-subject-publish-behavior-replay
https://pub.dev/documentation/rxdart/latest/rx/PublishSubject-class.html
https://pub.dev/documentation/rxdart/latest/rx/BehaviorSubject-class.html