앱 개발을 하다 보면 테마 변경이나 어플리케이션 설정과 같은 기능을 구현해야 할 때가 있습니다. 이러한 기능을 구현하려면 의존성 주입(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을 활용하여 테마 변경 및 어플리케이션 설정을 구현하는 방법에 대해 알아보았습니다. 이를 통해 앱의 테마나 설정과 같은 다양한 기능을 효율적으로 관리하고 구현할 수 있습니다.