Flutter App을 만들다 보면 상태관리를 GetX로 하거나 Provider등등 다양한 상태관리를 통해 App을 관리할 수 있다.
하지만 FlutterApp을 만들때 변수를 바꾸거나 관리하기 위해 StatefulWidget을 사용하는데
GetX라이브러리는 StatefulWidget 사용을 지양하하고 .obs 관찰 연산자를 통해 변수를 Observable로 바꾸는데 사용한다
이로인해 StatefulWidget은 사용하지 않고 StatelessWidget을 사용하게 되는데
StatelessWidget을 사용하게 되면, 그 Widget은 상태값을 가지지 않는 위젯이 된다.
그럼 이 상황에서 우리는 어떤 방식으로 생명주기를 관리할 수 있는지에 대해 의문이 들 수 있습니다.
Controller단에 GetxController을 상속받으면 LifeCycle을 사용할 수 있긴하다.
class CountController extends GetxController {
@override
void onInit() {
super.onInit();
}
@override
void onClose() {
super.onClose();
}
}
- onInit -> 컨트롤러가 생성될 때 호출됩니다.
- onClose -> 컨트롤러가 메모리에서 제거될 때 호출됩니다.
물론 lifecycle이 있긴 합니다만 기존 사용했던 onPause, onDetached, onInactive, onResume 등 조금 더 다양하게 LifeCycle를 관리할 경우가 생깁니다.
그럴경우 그럼 StatefulWidget도 사용이 불가하고 onInit, onClose로는 부족할 때 사용방법을 포스팅하려고 합니다.
방법은 굉장히 간단합니다.
FullLifeCycleController를 상속받으시면 됩니다.
사용하려는 Controller에 사용해도 되고 ,
처음 GetMaterialApp Main.dart 부분에서 Page이동시 GetPage 호출부에 binding controller을 하여 사용해도 무방합니다.
class CountController extends FullLifeCycleController with FullLifeCycleMixin{
RxInt counter = 0.obs;
void incresement(){
counter++;
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
print("onInit");
}
@override
void onDetached() {
print("onDetached");
// TODO: implement onDetached
}
@override
void onInactive() {
print("onInactive");
// TODO: implement onInactive
}
@override
void onPaused() {
print("onPaused");
// TODO: implement onPaused
}
@override
void onResumed() {
print("onResumed");
// TODO: implement onResumed
}
}
참고예제:
https://gist.github.com/eduardoflorence/d918d05ad71175b52c2aca95588c305d
Getx - Sample SuperController and FullLifeCycleController
Getx - Sample SuperController and FullLifeCycleController - main.dart
gist.github.com
감사합니다.
'Flutter' 카테고리의 다른 글
Flutter Generator 사용법 (0) | 2024.03.08 |
---|---|
[Flutter] - SliverAppBar 사용 방법 (0) | 2022.03.17 |
[Flutter] BottomNavigationBar (플러터 바텀네비게이션) 사용 방법 (0) | 2022.02.10 |
[Flutter] 2.0 Button(플러터 버튼) 사용방법 (0) | 2022.02.10 |
[Flutter] Bluetooth(플러터 블루투스) flutter_reactive_ble 사용방법 (0) | 2022.02.10 |