[Dart]

게시제목

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