[Flutter] Lifecycle

2024. 2. 7. 10:08dev/flutter

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
반응형

'dev > flutter' 카테고리의 다른 글

[Flutter] CustomPainter  (0) 2024.02.14
[Flutter] landscape, portrait #fullscreen #system  (0) 2024.02.11
[Flutter] FutureBuilder  (0) 2024.02.02
[Flutter] Youtube  (0) 2024.02.02
[Flutter] Firebase  (2) 2024.02.02