https://api.flutter.dev/flutter/dart-async/Completer-class.html
Completer
Dart의 Completer는 Future를 수동으로 완성시킬 수 있게 해주는 클래스. 보통 Future는 어떤 비동기 작업이 완료될 때 값을 반환하기 위해 사용되는데, Completer는 이 Future를 수동으로 제어할 수 있게 해준다.
Completer가 사용되는 상황
-비동기 작업의 결과를 수동으로 결정하고 싶을 때.
-여러 비동기 작업을 조합하여 하나의 작업으로 나타내고 싶을 때.
-이벤트 기반 시스템에서 특정 이벤트가 발생했을 때 비동기 작업을 완료시키고 싶을 때.
import 'dart:async';
void main() {
// Completer 생성
Completer<String> completer = Completer();
// Completer의 Future를 받아옴
Future<String> future = completer.future;
// Future에 대한 처리
future.then((value) {
print('Future completed with value: $value');
}).catchError((error) {
print('Future completed with error: $error');
});
// 비동기 작업이 완료되었다고 가정하고 Completer를 완료
completer.complete('Hello, World!');
// 또는 오류로 완료
// completer.completeError('An error occurred!');
}
화면에서 뒤로가기를 누르거나 앱바에서 뒤로가기를 눌렀을때 다이어로그를 띄우고 싶어 사용.
다이어로그 중 Y/N 버튼이 있음.
Y -> Navigator.pop(context,true); //화면 닫히며 true 반환
N -> Navigator.por(context,false); //화면 닫히며 false 반환
onWilPop을 사용해 뒤로가기 눌렀을때 기능 작성
final Completer<bool> completer =Completer(); //객체 생성
_myDialog(context,(didCancel){
completer.complete(didCancel); //사용자의 선택에 따라 완료
});
return completer.future; // completer가 완료될 때 까지 기다린 후 그 값을 반환
didCancel로 true/false 확인