dev/flutter
[Flutter] Lifecycle
donguran
2024. 2. 7. 10:08
728x90
반응형
Everything is a Widget !
StatelessWidget
: constructor → createState()
StatefulWidget
: initState → didChangeDependencis → dirty → build → clean(:setState → dirty) → deactivate → dispose
didUpdateWidget
: StatefulWidget의 매개변수가 변경된 경우 실행됨
웹뷰를 띄운 상태였고 release인데 흰 화면이 표출되었다.
아무래도 UI 재가동이 필요해보였고 시점을 알기위해 Lifecycle을 사용해야했다.
WidgetsBindingObserver를 사용한다.
class _HomeScreenState extends State<HomeScreen> with WidgetsBindingObserver{
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
그리고 오버라이드 함수로 didChangeAppLifecycleState를 받는다.
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
debugPrint('HomeScreen.. didChangeAppLifecycleState.. state:$state');
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
switch (state) {
case AppLifecycleState.detached:
debugPrint("[HomeScreen].. Lifecycle.. detached..");
break;
case AppLifecycleState.resumed:
debugPrint("[HomeScreen].. Lifecycle.. resumed..");
break;
case AppLifecycleState.inactive:
debugPrint("[HomeScreen].. Lifecycle.. inactive..");
break;
case AppLifecycleState.hidden:
debugPrint("[HomeScreen].. Lifecycle.. hidden..");
break;
case AppLifecycleState.paused:
debugPrint("[HomeScren].. Lifecycle.. paused..");
break;
}
}
모두 SkyEngine의 Dart Package에 있는 것이다. Flutter SDK라고 보면 된다. 아주 잘만들었다.
728x90
반응형