728x90
Async Programming에서 사용되는 기법
함수를 닫아주는 순간(완료 되는 순간)까지 계속 리턴 값을 받을 수 있다.
1. 스트림 사용 방법
import 'dart:async';
void main() {
//스트림 가져오기
final controller = StreamController();
final stream = controller.stream;
//스트림이 listen하고 있을 때 값을 받는다.
final streamListener1 = stream.listen((val) {
//값이 들어오면 실행 될 함수
print('리스너1 :: $val');
});
controller.sink.add(1);
}
2. 스트림 여러번 리스닝 하는 방법
void main() {
//스트림 가져오기
final controller = StreamController();
//한 번만 리스닝 할 때
//final stream = controller.stream;
//여러번 리스닝 할 때
final stream = controller.stream.asBroadcastStream();
//스트림이 listen하고 있을 때 값을 받는다.
final streamListener1 = stream.listen((val) {
//값이 들어오면 실행 될 함수
print('리스너1 :: $val');
});
final streamListener12 = stream.listen((val) {
print('리스너2 :: $val');
});
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
}
3. 즉석에서 Stream 값 변경하기 (조건 주기)
//스트림이 listen하고 있을 때 값을 받는다.
final streamListener1 = stream.where((val) => val % 2 == 0).listen((val) {
//값이 들어오면 실행 될 함수
print('리스너1 :: $val');
});
final streamListener12 = stream.where((val) => val % 2 == 1).listen((val) {
print('리스너2 :: $val');
});
4. 함수로 Stream 을 제공하는 방법
void main() {
cal(1).listen((val) {
print('cal 1 :: $val');
});
}
Stream<int> cal(int number) async* {
for (int i = 0; i < 5; i++) {
//yield 가 실행 할 때마다 cal 함수를 리스닝하고 있는 리스너에 값을 뿌려줌
yield i * number;
}
}
await를 쓸 때
void main() {
cal(1).listen((val) {
print('cal 1 :: $val');
});
cal(4).listen((val) {
print('cal 4 :: $val');
});
}
Stream<int> cal(int number) async* {
for (int i = 0; i < 5; i++) {
//yield 가 실행 할 때마다 cal 함수를 리스닝하고 있는 리스너에 값을 뿌려줌
yield i * number;
await Future.delayed(Duration(seconds: 1));
}
}
5. 함수 실행이 끝날때까지 기다리기
await와 같은 기능
void main() {
playAllStream().listen((val) {
print(val);
});
}
Stream<int> playAllStream() async* {
//yield : 순서대로
//yield* : 첫 번째 함수가 값이 다 받아와질 때까지 기다림
yield* cal(1);
yield* cal(1000);
}
728x90
'Flutter' 카테고리의 다른 글
[Dart] Async Programming 비동기 프로그래밍 (0) | 2024.07.25 |
---|---|
[Dart] where절과 reduce, fold (0) | 2024.07.17 |
[Dart] mapping (0) | 2024.07.17 |
[Dart] List를 Map 혹은 Set으로 변환하기 (0) | 2024.07.17 |
[Dart] function (0) | 2024.06.12 |