네이티브단에서는 안드로이드 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();
}
}
'dev > flutter' 카테고리의 다른 글
플랫폼 통신 BasicMessageChannel (안드로이드, IOS) (0) | 2023.05.31 |
---|---|
플랫폼 통신 MethodChannel (안드로이드, IOS) (0) | 2023.05.31 |
SliverAppBar 높이 파악하기 (RenderObject) (0) | 2023.05.19 |
파이어베이스 dynamic links (0) | 2023.05.17 |
CustomScrollView (0) | 2023.05.10 |