future는 일시적으로 데이터를 받을 때 사용 : http로 get할 때 많이 사용 async선언 필요
stream은 데이터를 계속 받을 때 사용 --> async * 선언해줘야 함
stream은 return이 아니라 yield 로 데이터를 보냄.
import 'dart:async';
Future<int> sunStream(Stream<int> stream) async{
var sum = 0;
await for (var value in stream){
sum += value;
print(sum);
}
return sum;
}
Stream<int> countStream(int to) async*{
for(int i=1;i<to;i++){
await Future.delayed(const Duration(seconds:1));
yield i;
}
}
var transformer = new StreamTransformer<int, String>.fromHandlers(handleData : (value, sink) {
sink.add("value: $value");
});
// 스트림은 중간에 값을 조작하는 것도 가능하다. 입력값은 int, 출력은 String
// 스트림은 하나만 선언해 줘야 함. 다중 스트림은 다르게.
// sink는 입구, stream은 출구
main() async{
var stream = countStream(10);
stream.transform(transformer).listen((value)=>print(value));
// stream.listen((value)=>{
// print("current value: " + value.toString())
// });
// var sum = await sumStream(stream);
// print(sum);
}