GetView는 Flutter에서 GetX 라이브러리를 사용할 때, 상태 관리와 의존성 주입을 더 쉽게 하기 위해 제공되는 유틸리티 위젯 중 하나다.
일반적으로 Flutter에서는 StatelessWidget과 StatefulWidget을 사용하여 UI를 구성한다.
GetView는 StatelessWidget을 확장한 것으로,
GetX의 컨트롤러를 사용할 때 보다 간결한 코드로 컨트롤러에 접근할 수 있게 해준다.
StatelessWidget은 상태가 없는 위젯으로, 생성될 때 전달받은 정보를 기반으로 화면을 그린다.
상태가 변하지 않으므로, 사용자 인터랙션이나 시간의 경과에 따라 UI가 변경될 필요가 없는 경우에 주로 사용된다.
반면, GetView는 StatelessWidget의 기능은 그대로 유지하면서, 추가로 GetX의 컨트롤러를 타입 안전하게 자동으로 연결해 주는 기능을 가진다.
이를 통해 개발자는 별도의 Get.find() 호출 없이도 컨트롤러에 직접 접근할 수 있게 된다.
GetView를 사용하면, 제네릭 타입 T에 해당하는 컨트롤러를 자동으로 찾아주므로, Get.find()를 호출하지 않고도 직접 컨트롤러를 사용할 수 있다.
이로 인해 코드가 더 간결해지고, 읽기 쉬워진다.
GetView의 제네릭 타입을 통해 컨트롤러의 타입을 명시적으로 지정할 수 있으므로, 타입 안전성이 보장된다.
컴파일 시간에 컨트롤러의 타입을 체크하여 오류를 미리 방지할 수 있다.
controller 속성을 통해 직접 컨트롤러의 메서드나 속성에 접근할 수 있다.
이는 코드 내에서 반복적인 Get.find() 호출을 줄여 준다.
아래는 GetView를 사용하는 간단한 예제이다.
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class MyController extends GetxController {
var count = 0.obs;
void increment() => count++;
}
class MyPage extends GetView<MyController> {
MyController get controller => Get.put(MyController());
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('GetView Example')),
body: Center(
child: Obx(() => Text('Clicks: ${controller.count}')),
),
floatingActionButton: FloatingActionButton(
onPressed: controller.increment,
child: Icon(Icons.add),
),
);
}
}
이 예제에서 MyPage는 GetView를 확장하고 있으며,
제네릭 타입으로 MyController를 지정한다.
controller 속성을 통해 MyController의 인스턴스에 접근하여,
사용자가 버튼을 누를 때 마다 카운트를 증가시키는 예제다.