참조 : www.youtube.com/watch?v=AKOUDHZsBP0&t=476s
1.stream데이터 합산해서 반환
import 'dart:async';
Future<int> sumStream(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 (var i = 1; i < to; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
void main() async {
//Stream
var stream = countStream(5);
var sum = await sumStream(stream);
print(sum);
}
2.Stream listen
listen value : int value
import 'dart:async';
Future<int> sumStream(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 (var i = 1; i < to; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
void main() async {
//Stream
var stream = countStream(5);
stream.listen((value) => {
print(value)
});
}
3.Stream listen + transform
*stream : 출구
*sink : 입구
listen value : String value
import 'dart:async';
Future<int> sumStream(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 (var i = 1; i < to; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
var transformer = new StreamTransformer<int,
String>.fromHandlers(handleData: (value, sink){
sink.add("value: $value");
});
void main() async {
//Stream
var stream = countStream(5);
stream.transform(transformer).listen((value) => {
print(value)
});
}
4.Stream 에러처리
import 'dart:async';
Future<int> sumStream(Stream<int> stream) async {
var sum = 0;
try{
await for (var value in stream) {
sum += value;
print(sum);
}
}catch(e){
print(e.toString());
return -1;
}
return sum;
}
Stream<int> countStream(int to) async* {
for (var i = 1; i < to; i++) {
await Future.delayed(Duration(seconds: 1));
if(i == 5){
throw new Exception('Intentional Error');
}else{
yield i;
}
}
}
void main() async {
//Stream
var stream = countStream(10);
var sum = await sumStream(stream);
print(sum);
}
5.Stream broadcast
import 'dart:async';
Future<int> sumStream(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 (var i = 1; i < to; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
void main() async {
//Stream
var stream = countStream(5);
var bcStream = stream.asBroadcastStream();
bcStream.listen((value) => {
print('again $value')
});
var sum = await sumStream(bcStream);
print(sum);
}
'플러터&어플리케이션' 카테고리의 다른 글
flutter singleton (0) | 2021.02.06 |
---|---|
flutter extension method (0) | 2021.02.06 |
flutter android studio live templates (0) | 2021.01.29 |
flutter 상속, 추상 클래스, 믹스인 (0) | 2021.01.28 |
flutter workmanager 패키지 적용 (0) | 2021.01.24 |