Flutter

Flutter - Getx(LifeCycle) 사용방법

728x90

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

 

감사합니다. 

728x90