앱을 구현하다 보면, 백그라운드 및 기본 위젯이 제공하는 override 메서드들 외에도
추가적인 감지 기능이 필요할 때가 있습니다.
그를 위한 것이, WidgetsBindingObserver 입니다.
https://api.flutter.dev/flutter/widgets/WidgetsBindingObserver-class.html
didChangeAccessibilityFeatures()
- 접근성 설정 변경 감지
- 접근성 기능 활성화/비활성화 감지
- 테마 변경 감지 (다크 모드/라이트 모드)
didChangeAppLifecycleState(AppLifecycleState state)
- 앱 활성화/비활성화 감지
- 앱 종료 감지
- 앱 상태 관리
didChangeLocales(List<Locale>? locales)
- 언어 변경 감지
- 지역별 리소스 관리
- 다국어 지원
didChangeMetrics()
- 디바이스 방향 변경 감지
- 디바이스 해상도 변경 감지
- 화면 크기 변경 감지
didChangePlatformBrightness()
- 시스템 테마 변경 감지
- 밝기 모드 변경 감지
- 테마 및 스타일 변경 감지
didChangeTextScaleFactor()
- 텍스트 크기 변경 감지
didHaveMemoryPressure()
- 메모리가 부족한 상태 감지
didPopRoute()
- 화면 이동 감지(이전 화면으로 돌아가는 경우)
didPushRoute(String route)
- 화면 이동 감지
didPushRouteInformation(RouteInformation routeInformation)
- 새로운 라우트 정보 푸시 감지
didRequestAppExit()
- 앱 종료 감지
class ExamplePage extends StatefulWidget {
State<ExamplePage> createState() => _ExamplePageState();
}
// with WidgetsBindingObserver 를 추가
class _ExamplePageState extends State<ExamplePage> with WidgetsBindingObserver {
void initState() {
super.initState();
// 앱의 생명주기를 관찰할 수 있도록 WidgetsBinding에 현재 인스턴스를 등록
WidgetsBinding.instance.addObserver(this);
}
// 위 Methods에서 사용하려는 메서드 override
void didChangeMetrics() {
// 기능 작성
}
void dispose() {
// 메모리 누수를 방지하기 위해 해제
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
}
참고 문서:
https://velog.io/@dev_seonhan/Flutter-WidgetsBindingObserver