Stream

devkwon·2023년 2월 14일
0
import 'dart:async';

void main() {
  final controller = StreamController();
  final stream = controller.stream;
  
  final streamListener1 = stream.listen((val){
    print(val);
  });
  
  controller.sink.add(1);
  controller.sink.add(2);
  controller.sink.add(3);
  controller.sink.add(4);
  Future.delayed(Duration(seconds:3),()=> controller.sink.add(5));
}

일반적으로 스트림은 단 한 번만 listen()을 실행할 수 있다.
만약 여러 번 사용하고 싶다면 브로드캐스트 스트림을 사용해야 한다.

import 'dart:async';

void main() {
  final controller = StreamController();
  final stream = controller.stream.asBroadcastStream();
  
  final streamListener1 = stream.listen((val){
    print('listening 1');
    print(val);
  });
  
  final streamListener2 = stream.listen((val){
    print('listening 2');
    print(val);
  });
  
  controller.sink.add(1);
  controller.sink.add(2);
  controller.sink.add(3);
  controller.sink.add(4);
  Future.delayed(Duration(seconds:3),()=> controller.sink.add(5));
}

함수로 stream을 반환할 수도 있다. Future 함수에 async* 키워드를 선언하고 값을 반환하면 된다. yield를 통해 값을 받는다.

import 'dart:async';

Stream<String> count(int i)async*{
  for(int j=0; j<i; j++){
    yield '${j+1}';
    await Future.delayed(Duration(seconds:1));
  }
}

void main() {
  count(5).listen((val){
    print(val);
  });
  
}

0개의 댓글