全局可用:GetxService 在應(yīng)用的整個生命周期內(nèi)保持活躍,因此你可以在應(yīng)用的任何部分訪問這個服務(wù)糕篇,并隨時獲取應(yīng)用生命周期的狀態(tài)。
解耦:通過將生命周期邏輯放在 GetxService 中,你的控制器和 UI 組件不需要關(guān)心生命周期事件晚吞,從而簡化了代碼結(jié)構(gòu)。
關(guān)鍵點說明:
LifecycleService 作為全局服務(wù):
繼承自 GetxService谋国,并實現(xiàn)了 WidgetsBindingObserver槽地,可以監(jiān)聽?wèi)?yīng)用的生命周期變化。
init 方法用于初始化服務(wù)芦瘾,并在啟動時添加生命周期觀察者捌蚊。
Get.putAsync 用于初始化服務(wù):
在 main 函數(shù)中,通過 Get.putAsync 將 LifecycleService 放入依賴管理中近弟。這確保了服務(wù)在應(yīng)用啟動時就被初始化缅糟,并且在整個應(yīng)用生命周期內(nèi)保持活躍。
didChangeAppLifecycleState 方法:
在這個方法中祷愉,你可以處理應(yīng)用從前臺切換到后臺窗宦、從后臺恢復(fù)到前臺,以及其他生命周期狀態(tài)的變化二鳄。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class LifecycleService extends GetxService with WidgetsBindingObserver {
Future<LifecycleService> init() async {
WidgetsBinding.instance.addObserver(this); // 添加生命周期觀察者
return this;
}
@override
void onClose() {
WidgetsBinding.instance.removeObserver(this); // 移除生命周期觀察者
super.onClose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.paused) {
print("App is in background");
// 處理應(yīng)用進入后臺的邏輯
} else if (state == AppLifecycleState.resumed) {
print("App is in foreground");
// 處理應(yīng)用進入前臺的邏輯
} else if (state == AppLifecycleState.inactive) {
print("App is inactive");
// 應(yīng)用處于非活動狀態(tài)赴涵,例如接收到電話或短信時
}
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('GetX Lifecycle Service Example'),
),
body: Center(
child: Text('Monitor App Lifecycle with GetX Service'),
),
),
);
}
}
void main() {
// 初始化 LifecycleService 并啟動應(yīng)用
WidgetsFlutterBinding.ensureInitialized();
Get.putAsync<LifecycleService>(() async => LifecycleService().init());
runApp(MyApp());
}