✅이번 시간에는 Future, async, await에 대해서 알아보자.
플러터를 공부하면서 느낀것이 전반적으로 RxSwift와 비슷한 느낌을 갖는다는 것이다.
그럼 한번 다시 보도록 할까?
코드 작성은 플러터 프로젝트의 - test - widget_test.dart에 작성한다.
✅가장 기준이 되는 코드
import 'dart:io';
void main() {
showData();
}
void showData() {
startTask();
accessData();
fetchData();
}
void startTask() {
String info1 = '요청 수행 시작';
print(info1);
}
void accessData() {
String info2 = '데이터에 접속중';
print(info2);
}
void fetchData() {
String info3 = '잔약은 8500원 입니다.';
print(info3);
}
✅개선 코드 1
import 'dart:io';
void main() {
showData();
}
void showData() {
startTask();
accessData();
fetchData();
}
void startTask() {
String info1 = '요청 수행 시작';
print(info1);
}
void accessData() {
Duration time = Duration(seconds: 3);
sleep(time);
String info2 = '데이터에 접속중';
print(info2);
}
void fetchData() {
String info3 = '잔약은 8500원 입니다.';
print(info3);
}
// 결과값
요청 수행 시작
- 지연 3초 -
데이터에 접속중
잔약은 8500원 입니다.
✅개선 코드 2
import 'dart:io';
void main() {
showData();
}
void showData() {
startTask();
accessData();
fetchData();
}
void startTask() {
String info1 = '요청 수행 시작';
print(info1);
}
void accessData() {
Duration time = Duration(seconds: 3);
if (time.inSeconds > 2) {
sleep(time);
String info2 = '데이터에 접속중';
print(info2);
} else {
String info2 = '데이터에 접속중';
print(info2);
}
}
void fetchData() {
String info3 = '잔약은 8500원 입니다.';
print(info3);
}
딜레이 시간이 2초보다 크면 3초간 재운다음에 실행 그렇지 않으면 바로 실행
✅개선 코드 3
import 'dart:io';
void main() {
showData();
}
void showData() {
startTask();
accessData();
fetchData();
}
void startTask() {
String info1 = '요청 수행 시작';
print(info1);
}
void accessData() {
Duration time = Duration(seconds: 3);
if (time.inSeconds > 2) {
//sleep(time);
Future.delayed(time, (){
String info2 = '데이터에 접속중';
print(info2);
});
} else {
String info2 = '데이터에 접속중';
print(info2);
}
}
void fetchData() {
String info3 = '잔약은 8500원 입니다.';
print(info3);
}
// 결과
요청 수행 시작
잔약은 8500원 입니다.
데이터에 접속중
✅개선 코드 4
import 'dart:io';
void main() {
showData();
}
void showData() {
startTask();
String account = accessData();
fetchData(account);
}
void startTask() {
String info1 = '요청 수행 시작';
print(info1);
}
String accessData() {
String account = "null";
Duration time = Duration(seconds: 3);
if (time.inSeconds > 2) {
//sleep(time);
Future.delayed(time, (){
account = '데이터 처리 완료';
print(account);
});
} else {
String info2 = '데이터에 접속중';
print(info2);
}
return account;
}
void fetchData(String account) {
String info3 = '잔액은 $account 입니다.';
print(info3);
}
// 결과값
요청 수행 시작
잔액은 null 입니다.
데이터 처리 완료
✅개선 코드 5
import 'dart:io';
void main() {
showData();
}
void showData() async{
startTask();
String account = await accessData();
fetchData(account);
}
void startTask() {
String info1 = '요청 수행 시작';
print(info1);
}
Future<String> accessData() async{
String account = "null";
Duration time = Duration(seconds: 3);
if (time.inSeconds > 2) {
//sleep(time);
await Future.delayed(time, (){
account = '데이터 처리 완료';
print(account);
});
} else {
String info2 = '데이터에 접속중';
print(info2);
}
return account;
}
void fetchData(String account) {
String info3 = '잔액은 $account 입니다.';
print(info3);
}
// 결과값
요청 수행 시작
- 지연 -
데이터 처리 완료
잔액은 데이터 처리 완료 입니다.
'flutter > 조금 매운맛 (중급)' 카테고리의 다른 글
[flutter2.0] 12강 | Future-async 심화 (0) | 2021.08.23 |
---|---|
[flutter2.0] 8강 - 2 | APICall & JsonParsing (0) | 2021.08.17 |
[flutter2.0] 7강 | 로그인 페이지 코드 리팩토링(refactoring) (0) | 2021.08.17 |
[flutter2.0] 3~5강 | 로그인과 주사위 앱 만들기 (0) | 2021.08.17 |
[flutter2.0] 1강~2강 | Stateful widget (0) | 2021.08.16 |