[flutter] get_it을 활용한 테마 변경 및 어플리케이션 설정

앱 개발을 하다 보면 테마 변경이나 어플리케이션 설정과 같은 기능을 구현해야 할 때가 있습니다. 이러한 기능을 구현하려면 의존성 주입(Dependency Injection)이 필요한데, Flutter에서는 get_it 패키지를 사용하여 이를 수행할 수 있습니다.

get_it이란?

get_it은 의존성 주입을 위한 간단하면서도 강력한 서비스 로케이터(Service Locator) 패턴을 제공하는 패키지입니다. 이를 통해 앱 전반에 걸쳐 여러 곳에서 사용되는 기능이나 상태를 쉽게 관리하고 엑세스할 수 있습니다.

테마 변경 구현하기

가장 많이 사용되는 예로, 앱에서 두 가지 이상의 테마를 제공하고 사용자가 선택할 수 있도록 하는 기능을 구현해 보겠습니다.

1. ThemeData 서비스 생성하기

먼저, 앱 전체에서 사용될 테마 데이터를 관리하는 서비스를 생성합니다.

class ThemeService {
  ThemeData currentTheme = ThemeData.light();

  void setTheme(ThemeData newTheme) {
    currentTheme = newTheme;
  }
}

2. 서비스 로케이터 설정하기

이후, get_it을 사용하여 해당 서비스에 액세스할 수 있도록 서비스 로케이터를 설정합니다.

final getIt = GetIt.instance;

void setupLocator() {
  getIt.registerLazySingleton(() => ThemeService());
}

3. 테마 변경 기능 구현하기

마지막으로, 앱 내에서 테마를 변경하는 기능을 구현합니다. 버튼 클릭 또는 사용자 입력과 같은 이벤트에 대응하여 테마를 변경할 수 있도록 합니다.

FlatButton(
  onPressed: () {
    var themeService = getIt<ThemeService>();
    themeService.setTheme(ThemeData.dark());
  },
  child: Text('Change Theme'),
)

어플리케이션 설정 저장 및 불러오기

이어서, 사용자가 선택한 테마 설정을 저장하고, 앱이 다시 실행될 때 그 설정을 불러와서 적용하는 기능을 구현해 보겠습니다.

1. 어플리케이션 설정 모델 생성하기

먼저, 사용자의 앱 설정을 저장할 모델을 만듭니다.

class AppSettings {
  ThemeData selectedTheme = ThemeData.light();
}

2. 어플리케이션 설정 관리 서비스 생성하기

다음으로, 앱 설정을 관리하는 서비스를 생성합니다.

class SettingsService {
  AppSettings settings = AppSettings();

  void saveSettings() {
    // 설정 저장 로직 추가
  }

  void loadSettings() {
    // 설정 불러오기 로직 추가
  }
}

3. 서비스 로케이터에 추가하기

이어서, 해당 서비스를 서비스 로케이터에 추가합니다.

void setupLocator() {
  getIt.registerLazySingleton(() => ThemeService());
  getIt.registerLazySingleton(() => SettingsService());
}

4. 설정 저장 및 불러오기 구현하기

마지막으로, 앱에서 설정을 저장하고 불러오는 기능을 구현합니다.

FlatButton(
  onPressed: () {
    var settingsService = getIt<SettingsService>();
    settingsService.saveSettings();
  },
  child: Text('Save Settings'),
)
void main() {
  setupLocator();
  var settingsService = getIt<SettingsService>();
  settingsService.loadSettings();
  runApp(MyApp());
}

이제, get_it을 활용하여 테마 변경 및 어플리케이션 설정을 구현하는 방법에 대해 알아보았습니다. 이를 통해 앱의 테마나 설정과 같은 다양한 기능을 효율적으로 관리하고 구현할 수 있습니다.