03. 다트 비동기 프로그래밍
2024. 4. 9. 21:32
03. 다트 비동기 프로그래밍
Future
Future 클래스는 미래에 받아올 값이라는 의미
Future<String> name; // 미래에 받을 String 값
Future<int> number; // 미래에 받을 int 값
Future<bool> isOpened // 미래에 받을 boolean 값
void main() {
addNumbers(1, 2);
}
void addNumbmers(int number1, int number2) {
print ('$number1 + $number2 계산 시작');
//Future.delayed()를 사용하여 일정 시간 이후 콜백 함수 실행
Future.delayed(Duration(seconds: 3), () {
print('$number1 + $number2 = ${number1 + number2}');
});
print ('$number1 + $number2 코드 실행 끝');
}
/*
* 실행 결과
* 1 + 2 계산 시작
* 1 + 2 코드 실행 끝
* 1 + 2 = 3
*/
async와 await
void main() {
addNumbers(1, 2);
}
Future<void> addNumbers(int number1, int number2) async{
print ('$number1 + $number2 계산 시작');
// await는 대기하고 싶은 비동기 함수 앞에 입력
await Future.delayed(Duration(seconds: 3), () {
print('$number1 + $number2 = ${number1 + number2}');
});
print ('$number1 + $number2 코드 실행 끝');
}
/*
* 실행 결과
* 1 + 2 계산 시작
* 1 + 2 = 3
* 1 + 2 코드 실행 끝
*/
Stream
Future는 반환을 딱 한번 받아내는 비동기 프로그래밍
지속적으로 값을 반환 받을 땐 Stream 사용
// 일반 스트림
import 'dart:async';
void main() {
final controller = StreamController();
final stream = controller.stream; // stream 생성
// listen() 함수 실행 시 값이 주입될 때 마다 콜백 함수 실행
final streamListener1 = stream.listen((val) {
print(val);
});
// stream에 값 주입
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
controller.sink.add(4);
}
// 브로드캐스트 스트림 : 하나의 스트림을 생성하고 여러번 listen()함수를 실행하고 싶을 때 사용
import 'dart:async';
void main() {
final controller = StreamController();
final stream = controller.stream.asBroadcastStream();
//첫번째 listen 함수
final streamListener1 = stream.listen((val) {
print('listening 1');
print(val);
});
//두번째 listen 함수
final streamListener2 = stream.listen((val) {
print('listening 2');
print(val);
});
// stream에 값 주입
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
}
//함수로 스트림 반환
import 'dart:async';
Stream<String> calculate(int number) async* {
for(int i = 0; i < 5; i++) {
yield i = $i;
await Future.delayed(Duration(seconsd : 1));
}
}
void playStream() {
calculate(1).listen((val) {
print(val);
});
}
void main() {
playStream();
}
'책 > [묘공단] 코드팩토리의 플러터 프로그래밍' 카테고리의 다른 글
06. 기본 위젯 알아보기 (0) | 2024.04.14 |
---|---|
05. 플러터 입문하기 (0) | 2024.04.14 |
04. 다트 3.0 신규 문법 (0) | 2024.04.09 |
02. 다트 객체지향 프로그래밍 (0) | 2024.04.09 |
01. 다트 입문하기 (변수선언, 컬렉션, typedef) (1) | 2024.04.07 |