본문 바로가기

dev/flutter

플러터 앱 생명주기 감지 LifeCycle

네이티브단에서는 안드로이드 onPause, onResume 등등 생명주기를 감지하기 쉽다. 

플러터에서도 이를 감지할 수 있는 기능이 있다.

 

1. StatefulWidget 으로 생성

 

 

 

2. WidgetBindingObserver 상속  이벤트 등록

 

 

 

3. 상태에 따라서 코드 실행

 

 

 

 

 

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

class LifeCycle extends StatefulWidget {
  const LifeCycle({super.key});

  @override
  State<LifeCycle> createState() => _LifeCycleState();
}

class _LifeCycleState extends State<LifeCycle> with WidgetsBindingObserver  {

  @override
  void initState() {
    // 앱 상태 감지 등록
    WidgetsBinding.instance.addObserver(this);
    super.initState();
  }

  @override
  void dispose() {
    //앱 상태 감지 해제
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }
  
  // 앱 상태에 따른 분기처리
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    Dio dio = Get.find<Dio>();
    switch (state) {
      case AppLifecycleState.resumed: // 포그라운드 상태
        dio.get("/test");
        print("resumed");
        break;
      case AppLifecycleState.inactive: // 비활성화 상태 -> 이후 paused 발생
        dio.get("/v1/communities/1");
        print("inactive");
        break;
      case AppLifecycleState.paused: // 백그라운드 상태
        dio.get("/v1/communities/1");
        print("paused");
        break;
      case AppLifecycleState.detached: // 종료
        print("detached");
        break;
    }
  }
  
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}