Flutter에서 상태 관리를 비롯해 다양한 기능을 제공하는 라이브러리
puspect.yaml 파일에 GetX 패키지 추가
.obs를 사용하여 변수를 관찰 가능한 상태로 만들고,
Obx()위젯 또는Getx()위젯을 사용하여 UI를 해당 상태에 반응하게 할 수 있다.
GetX 에서 가장 많이 쓰이는 위젯으로, Rx 변수 라는 특별한 변수를 감지해 값이 바뀌면 자동으로 UI를 다시 그려준다.
var count = 0.obs;
Obx(() => Text("숫자: $count"))
위 코드에서 count가 바뀌면 Text도 자동으로 바뀐다.
setState() 없이도 화면이 반응하니 간단
Obx는 자동이지만, 내가 직접 UI를 업데이트 하고 싶을 때 사용
class MyController extends GetxController {
int count = 0;
void increment() {
count++;
update(); // 여기서만 UI 갱신!
}
}
GetBuilder<MyController>(
builder: (controller) {
return Text("숫자: ${controller.count}");
}
)
update()를 호출할 때만 UI가 바뀌기 떄문에, 불필요한 렌더링을 줄이고 싶을 때 유용하다.
앱이 커지면 상태를 여러 곳에서 다루게 되므로, 컨트롤러 클래스를 만들어 상태를 관리하는게 좋다.
class CounterController extends GetxController {
var count = 0.obs;
void increment() {
count++;
}
}
final controller = Get.put(CounterController());
이렇게 만든 컨트롤러는 어디서든 꺼내 쓸 수 있고, 하나로 여러 UI를 조작할 수 있어 유지보수가 쉽다.
앱을 이동하다보면, 여러 컨트롤러가 계속 쌓일 수 있다. 이걸 그냥 두면 메모리를 잡아먹어 앱이 느려지거나 문제가 발생할 수 있기에 더 이상 필요없는 컨트롤러는 명시적으로 삭제 해줘야 한다.
Get.delete<CounterController>();
Flutter 쪽 Controller는 "페이지/기능 단위"가 기본이다.
HomeController – 홈 화면 전용 상태/로직
ItemListController – 어떤 리스트 화면 (예: 신청 목록)
ItemFormController – 신청 작성/수정 화면
AuthController – 로그인/로그아웃/토큰 같은 전체 앱 공통 상태
AppController – 현재 유저, 공통 설정 등 글로벌 상태