Flutter GetX 상태 관리 쉽게 이해하기

Flutter GetX 상태 관리 쉽게 이해하기
Cozy CodingPosted On Jun 23, 20243 min read

GetX는 가벼우면서 뛰어난 성능을 제공하는 Flutter 패키지입니다. 상태 관리에 국한되지 않고 네비게이션, 의존성 주입 및 국제화 기능도 포함하고 있어 Flutter 개발자를 위한 다목적 도구상자입니다. GetX는 그 간결함, 성능 및 다양한 기능으로 알려져 있습니다. Flutter 개발에서 일반적인 작업을 위한 추가적인 유틸리티와 함께 가벼우면서 반응적인 상태 관리 솔루션을 선호하는 개발자들에게 적합한 선택입니다. 이 패키지의 유연성과 사용 편의성은 Flutter 커뮤니티 내에서 인기를 끌고 있습니다.

GetX 상태 관리의 주요 기능:

Reactive State Management:

final count = 0.obs;

// In the UI:
Obx(() => Text('Count: ${controller.count}'));

의존성 주입:

Get.lazyPut < MyService > (() => MyService());

경로 관리:

Get.toNamed("/next");

스낵바 및 대화상자:

Get.snackbar("제목", "이것은 스낵바입니다");

StateMixin:

class MyController extends GetxController with StateMixin<String> {
  @override
  void onInit() {
    super.onInit();
    change('Initial Data', status: RxStatus.success());
  }
}

GetX Service:

class MyService extends GetxService {
  // ...
}

국제화 (i18n):

"hello".tr;

GetX 빌더:

GetBuilder<MyController>(
builder: (_) {
return Text('Value: ${_.myValue}');
},
)

GetX 설정하기

GetX를 Flutter 프로젝트에서 사용하려면, 다음 종속성을 pubspec.yaml 파일에 추가해주세요:

dependencies:
  get: ^4.6.6

get install | Flutter 패키지 (pub.dev)

GetX를 사용한 간단한 카운터 예제

import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() {
  runApp(MyApp());
}

class CounterController extends GetxController {
  // observable 변수 선언 (RxInt)
  RxInt count = 0.obs;

  // 카운터 증가 함수
  void increment() {
    count++;
  }
}

class MyApp extends StatelessWidget {
  // 카운터 컨트롤러 인스턴스화
  final CounterController controller = CounterController();

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'GetX 카운터 앱',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('GetX 카운터 앱'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              // Obx 위젯은 observable 변수의 변경 사항을 감지
              Obx(() => Text(
                '카운트: ${controller.count}',
                style: TextStyle(fontSize: 24),
              )),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  // 버튼을 눌렀을 때 increment 함수 호출
                  controller.increment();
                },
                child: Text('증가'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}