본문 바로가기
Flutter/Package

[GetX] 플러터에서 GetX패키지를 사용한 테마 및 언어 설정 상세가이드

by Maccrey Coding 2024. 7. 14.
728x90
반응형

Flutter GetX를 사용한 테마 및 언어 설정 가이드

안녕하세요, Flutter 초보자 여러분! 오늘은 Flutter에서 GetX를 사용하여 앱의 테마와 언어를 변경하는 방법에 대해 알아보겠습니다. GetX는 Flutter에서 상태 관리, 라우팅 및 종속성 주입을 간단하게 해주는 강력한 패키지입니다.

이 가이드를 통해 테마와 언어 설정을 쉽게 구현할 수 있도록 도와드리겠습니다.

GetX 설치하기

먼저 pubspec.yaml 파일에 GetX 패키지를 추가해야 합니다.

dependencies:
  flutter:
    sdk: flutter
  get: ^4.6.5  # 최신 버전을 확인해 추가하세요

그런 다음 flutter pub get 명령어를 실행하여 패키지를 설치합니다.

테마 설정하기

1. 테마 컨트롤러 생성하기

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

class ThemeController extends GetxController {
  // 테마를 다크 모드로 설정하는 변수
  var isDarkMode = false.obs;

  // 테마 변경 함수
  void changeTheme(bool isDark) {
    isDarkMode.value = isDark;
    Get.changeTheme(isDark ? ThemeData.dark() : ThemeData.light());
  }
}

 

2. 테마 컨트롤러 사용하기

main.dart 파일에서 GetX와 테마 컨트롤러를 초기화합니다.

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

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

class MyApp extends StatelessWidget {
  // ThemeController 인스턴스를 생성하여 사용합니다.
  final ThemeController themeController = Get.put(ThemeController());

  @override
  Widget build(BuildContext context) {
    return Obx(
      // 테마가 변경될 때마다 Obx가 반응하여 UI를 업데이트 합니다.
      () => GetMaterialApp(
        title: 'Flutter Demo',
        theme: themeController.isDarkMode.value ? ThemeData.dark() : ThemeData.light(),
        home: HomeScreen(),
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  final ThemeController themeController = Get.find<ThemeController>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GetX Theme Example'),
      ),
      body: Center(
        child: Switch(
          value: themeController.isDarkMode.value,
          onChanged: (value) {
            themeController.changeTheme(value);
          },
        ),
      ),
    );
  }
}

언어 설정하기

1. 언어 컨트롤러 생성하기

import 'package:get/get.dart';

class LocalizationController extends GetxController {
  // 현재 선택된 언어
  var currentLanguage = 'en'.obs;

  // 언어 변경 함수
  void changeLanguage(String languageCode) {
    currentLanguage.value = languageCode;
    var locale = Locale(languageCode);
    Get.updateLocale(locale);
  }
}

 

2. 언어 리소스 추가하기

다음으로는 localization.dart 파일을 생성하고 언어 리소스를 정의합니다.

import 'package:get/get.dart';

class Messages extends Translations {
  @override
  Map<String, Map<String, String>> get keys => {
        'en': {
          'hello': 'Hello',
          'change_language': 'Change Language',
        },
        'es': {
          'hello': 'Hola',
          'change_language': 'Cambiar idioma',
        },
      };
}

 

 

3. 언어 컨트롤러 사용하기

main.dart 파일에서 GetX와 언어 컨트롤러를 초기화합니다.

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

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

class MyApp extends StatelessWidget {
  // LocalizationController 인스턴스를 생성하여 사용합니다.
  final LocalizationController localizationController = Get.put(LocalizationController());

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'Flutter Demo',
      // 언어 리소스를 설정합니다.
      translations: Messages(),
      locale: Locale('en'),
      fallbackLocale: Locale('en'),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  final LocalizationController localizationController = Get.find<LocalizationController>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GetX Localization Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('hello'.tr),  // 현재 언어에 맞는 텍스트를 표시합니다.
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                localizationController.changeLanguage('es');  // 언어를 스페인어로 변경합니다.
              },
              child: Text('change_language'.tr),  // 현재 언어에 맞는 텍스트를 표시합니다.
            ),
          ],
        ),
      ),
    );
  }
}

 

 

이제 GetX를 사용하여 테마와 언어를 쉽게 변경할 수 있게 되었습니다!

이 가이드를 통해 앱의 사용자 경험을 향상시키는 데 도움이 되기를 바랍니다.

728x90
반응형