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);
});
}