728x90
반응형
Flutter에서 앱 상태를 확인할 수 있는 이벤트를 출력하는 방법에 대해 알아보겠습니다.
https://docs.flutter.dev/get-started/flutter-for/ios-devs#how-do-i-listen-to-ios-lifecycle-events
import 'package:flutter/widgets.dart';
class LifecycleWatcher extends StatefulWidget {
@override
_LifecycleWatcherState createState() => _LifecycleWatcherState();
}
class _LifecycleWatcherState extends State<LifecycleWatcher> with WidgetsBindingObserver { // (1)
AppLifecycleState _lastLifecycleState;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this); // (2)
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this); // (3)
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) { // (4)
switch (state) {
case AppLifecycleState.detached: // (5)
print("## detached");
break;
case AppLifecycleState.inactive: // (6)
print("## inactive");
break;
case AppLifecycleState.paused: // (7)
print("## paused");
break;
case AppLifecycleState.resumed: // (8)
print("## resumed");
break;
}
setState(() {
_lastLifecycleState = state;
});
}
@override
Widget build(BuildContext context) {
if (_lastLifecycleState == null) {
return Text(
'This widget has not observed any lifecycle changes.',
textDirection: TextDirection.ltr,
);
}
return Text(
'The most recent lifecycle state this widget observed was: $_lastLifecycleState.',
textDirection: TextDirection.ltr,
);
}
}
void main() {
runApp(Center(child: LifecycleWatcher()));
}
(1) with WidgetsBindingObserver : 앱 상태 변경 이벤트를 받기 위해 WidgetsBindingObserver를 mixin(with) 합니다.
(2) 앱 상태 변경 이벤트를 등록합니다.
(3) 앱 상태 변경 이벤트를 해제합니다.
(4) didChangeAppLifecycleState : 앱 상태 변경 시 호출하는 메서드입니다.
(5) detached : 앱이 여전히 flutter 엔진에서 호스팅되지만 모든 호스트 view에서 분리됩니다.
(6) inactive : 앱이 비활성 상태이며 사용자 입력을 수신하지 않습니다.
(7) paused : 앱이 현재 사용자에게 표시되지 않고 사용자 입력에 응답하지 않고 백그라운드에서 실행 중입니다.
(8) resumed : 앱이 표시 되고 사용자 입력에 응답합니다. 앱 최초 실행때는 해당 이벤트가 발생하지 않습니다.
※
앱을 백그라운드로 실행했을 경우 : inactive -> paused
백그라운드에서 앱을 활성화 했을 경우 : resumed
앱을 종료했을 경우 : inavctive -> paused -> detached
728x90
반응형
'mobile > flutter' 카테고리의 다른 글
[Flutter/iOS] No CupertionLocalizations found. (0) | 2021.11.15 |
---|---|
[Flutter | AOS] 위변조 탐지 - 서명값 비교 (0) | 2021.10.01 |
[flutter] SocketException: Failed host lookup: 'www.xyz.com' (OS Error: No address associated with hostname, errno = 7) (0) | 2021.08.25 |
[flutter] Copy to clipboard on tap. Use ScaffoldMessenger.showSnackBar. (0) | 2021.08.17 |
[Dart] Null safety (0) | 2021.07.14 |
댓글