본문 바로가기
mobile/flutter

[Flutter] AppLifeCycle event (onResume 등)

by moonsiri 2022. 1. 20.
728x90
반응형

Flutter에서 앱 상태를 확인할 수 있는 이벤트를 출력하는 방법에 대해 알아보겠습니다.

 

https://docs.flutter.dev/get-started/flutter-for/android-devs#how-do-i-listen-to-android-activity-lifecycle-events

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

댓글