Stream

luneah·2022년 8월 11일
0

Flutter

목록 보기
18/29
post-thumbnail

Stream

데이터가 흐르고 이에 반응하여 UI를 갱신하고자 할 때 등등 활용
⇒ 리액티브 프로그래밍
⇒ 데이터 수정 → UI 변경이 자동으로

데이터가 지속적으로 변경되도록 하고 이를 관찰할 수 있다. (비슷한 것 : Rx)
Rx 보다 간단하고 편리하다. RxDart도 있으나 복잡하니 Stream을 써도 충분하다.

  • Stream 생성
    스트림은 여러 비동기 이벤트를 처리하는 방법을 제공한다. 다음 코드는 숫자 리스트 스트림을 시뮬레이션 하고 있다.
    var stream = Stream.fromIterable([1, 2, 3]);
    기본적으로 스트림은 하나의 리스너만 가질 수 있다. 여러 리스너를 허용하려면 브로드캐스트 스트림으로 변환해야 한다.
    var stream = Stream.fromIterable([1, 2, 3]).asBroadcastStream();`1
  • Stream 관찰
    listen 메서드로 스트림을 구독할 수 있다. 콜백 함수는 스트림에서 내보낸 각 데이터(event)에 의해 호출된다.
    stream.listen((event) => print(event));
  • StreamController 사용 예
    상태 변경을 Stream으로 방출
    import 'dart:async';
       
    class Counter {
    	final _countStreamController = StreamController<int>()..add(0);
       
    	Stream<int> get countStream => _countStreamController.stream;
       
    	int _count = 0;
       	
    	// Stream에서 필요없는 것
    	int count = 0;
       
    	void increment() {
    	  _count++;
    	  _countStreamController.add(_count);
    	}
    }
  • 비동기 for 루프
    async - await를 사용하여 스트림을 관찰할 수 있다.
    streamFun() async {
    	var stream = Stream.fromIterable([4, 5, 6]);
       
    	await for (int value in stream) {
    	  print(value);
    	}
    }

StreamBuilder

Stream을 위젯으로 표현하는 위젯으로 FutureBuilder와 Future 조합과 비슷하다. Future가 단발성이라면 Stream은 지속적으로 변화에 따라 화면을 갱신한다.

StreamBuilder<int> (
	initialData: 0,
	stream: counter.countStream,
	builder: (context, snapshot) {
		return Text('$snapshot.data!');
	}
),
profile
하늘이의 개발 일기

0개의 댓글