Languages/Dart & Flutter
dart 어려운 stream, streamController 내맘대로 이해
프로그래멍
2021. 1. 29. 11:32
스트림 개념은 쉬웠다.
하지만 프로젝트에 적용하려면 어려웠다.
어떻게 사용해야 되는지 모르겠더라.
알아보자.
개념은 이미지가 전부이다.
컨트롤러가 add를 해서 제공을 해주고
스트림은 컨트롤러에서 받은 것을 subscription에게 전달해주는 역할을 한다.
전달해주는 중간에 add한 data를 내맘대로 변경시킬 수 있다.
수신자는 구독을 할 수도, 구독을 취소 할 수도 있다.
그러면서 이제 단일방송이냐, 다수방송이냐가 들어오면서 머리가 복잡해지고 다시 개념을 보게되고 그랬다.
스트림은 한개의 리슨만 할 수 있다.
하지만 broadcast를 하면 여러개의 리슨을 할 수 있다.
브로드케스트는 컨트롤러나 스트림에서 할 수 있으며
어디에서 브로드케스트를 하느냐에 따라 달라지게 된다.
코드를 보자.
StreamController ctrl = StreamController();
Stream streamDirection;
StreamSubscription subscription;
생성자(){
streamDirection = ctrl.stream.asBroadcastStream();
streamDirection.listen((data) {
newDirection = data;
for (int i = 0; i < poi.length; i++) {
double long = pow(poi[i].longitude - direction['longitude'], 2);
double lat = pow(poi[i].latitude - direction['latitude'], 2);
double dis = sqrt(lat + long);
poi[i].distance = dis;
if (poi[i].distance < 101 && categorySet.contains(poi[i].category)) {
text.add(poi[i].name);
} else {
text.remove(poi[i].name);
}
} // for
poi.sort((a, b) => a.distance.compareTo(b.distance));
});
subscription = streamDirection.listen((event) {
view.scaffoldKey.currentState.showSnackBar(SnackBar(
content:
Text(text.toString().substring(1, text.toString().length - 1))));
});
}
void moveUp() {
direction['latitude'] = direction['latitude'] + 10;
ctrl.add(direction);
}
참고
beomseok95.tistory.com/308#Stream_%EC%9D%B4%EB%9E%80__
Dart 언어 Stream 알아보기(Dart 비동기 프로그래밍)
Dart 언어 Stream 알아보기(Dart 비동기 프로그래밍) Dart 언어의 Stream에 대하여 알아보겠습니다. 목차 Table of Contents Stream 이란?? 스트림은 데이터나 이벤트가 들어오는 통로입니다. 앱을 만들다 보
beomseok95.tistory.com
www.youtube.com/watch?v=AKOUDHZsBP0