본문 바로가기

플러터&어플리케이션

flutter stream 정리2

참조 : 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