이번에는 Completer 에 대해서 알아보겠습니다.
Completer 는 future 객체를 방법입니다(나중에 값이나 에러를 반환 가능, callback 으로 사용가능).
개발환경 : dart pad, flutter 3.0.3
소스코드는 아래와 같음.
import 'dart:async';
import 'dart:math';
void main() {
// futureOne 함수는 동기방식으로 결과는 간단하다, 짝수면 성공 홀수면 실패 출력
// 1. Lucky number is 0
// 1. Success
final Future futureOne = Future(() {
Random rnd = Random();
int luck = rnd.nextInt(10);
print('1. Lucky number is $luck');
if (luck % 2 == 0) {
return '1. Success';
} else {
return '1. Failure';
}
});
futureOne.then((value) {
print(value);
}).catchError((err) {
print(err);
});
// futureTwo 함수는 비동기방식인데, Completer 를 사용하지 않아서 원하는 결과가 나오지 않음
// null
// 2. Lucky number is 7
// 2. Failure
final Future futureTwo = Future (() {
Timer(const Duration(seconds: 1), () {
Random rnd = Random();
int luck = rnd.nextInt(10);
print('2. Lucky number is $luck');
if (luck % 2 == 0) {
print("2. Success");
// return "2. Success";
} else {
print("2. Failure");
// return '2. Failure';
}
});
});
futureTwo.then((value) {
print(value);
}).catchError((err) {
print(err);
});
// futureThree 함수는 비동기방식고, Completer 를 사용하여 원하는 결과가 나옴
// 3. Lucky number is 0
// 3. Success
Future futureThree(int sec) {
Completer c = Completer();
Timer(Duration(seconds: sec), () {
Random rnd = Random();
int luck = rnd.nextInt(10);
print('3. Lucky number is $luck');
if (luck % 2 == 0) {
c.complete('3. Success');
} else {
c.completeError('3. Failure');
}
});
return c.future;
}
futureThree(2).then((value) {
print(value);
}).catchError((err) {
print(err);
});
}
[참고자료] 헤비프랜
- https://www.youtube.com/watch?v=DWmhEtZ0EVU&t=13s
'Flutter > 04 Widgets' 카테고리의 다른 글
[Flutter] Widgets - Google map 2 (0) | 2022.06.30 |
---|---|
[Flutter] Widgets - Google map (0) | 2022.06.28 |
[Flutter] Widgets - FormBuilder 4 (0) | 2022.06.27 |
[Flutter] Widgets - FormBuilder 3 (0) | 2022.06.25 |
[Flutter] Widgets - FormBuilder 2 (0) | 2022.06.24 |