[flutter] shared_preferences를 통해 앱 내에서 사용자가 선택한 테마를 저장하는 방법은?

Flutter 앱을 개발할 때 사용자가 선택한 테마를 저장하고 나중에 불러와 사용할 수 있도록 하는 것은 매우 중요합니다. 여러가지 방법이 있지만, 이 포스트에서는 shared_preferences 패키지를 사용하여 이 기능을 구현하는 방법을 알아보겠습니다.

1. shared_preferences 패키지 추가하기

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

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.6

그리고 터미널에서 다음 명령어를 실행하여 패키지를 설치합니다.

flutter pub get

2. 테마 선택을 저장하고 불러오기

이제 테마 선택을 저장하고 불러오기 위한 유틸리티 클래스를 만들어봅시다.

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

class ThemePreferences {
  static const String key = 'theme_key';

  static Future<void> setTheme(ThemeMode themeMode) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setInt(key, themeMode.index);
  }

  static Future<ThemeMode> getTheme() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    int themeIntValue = prefs.getInt(key) ?? ThemeMode.system.index;
    return ThemeMode.values[themeIntValue];
  }
}

위 코드에서 ThemePreferences 클래스는 테마를 저장하고 불러오기 위한 메서드를 제공합니다. setTheme 메서드는 사용자가 선택한 테마를 저장하고, getTheme 메서드는 저장된 테마를 불러옵니다.

3. 테마 적용하기

마지막으로, 앱 전체에서 테마를 적용해야 합니다.

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder<ThemeMode>(
      future: ThemePreferences.getTheme(),
      builder: (context, snapshot) {
        return MaterialApp(
          themeMode: snapshot.hasData ? snapshot.data : ThemeMode.system,
          theme: ThemeData.light(),
          darkTheme: ThemeData.dark(),
          home: MyHomePage(),
        );
      },
    );
  }
}

위 코드는 앱이 실행될 때 저장된 테마를 불러와 적용하는 예제입니다.

이제 테마를 저장하고 불러오는 과정을 shared_preferences를 통해 구현하는 방법을 알아보았습니다. 여러분의 Flutter 앱에 테마 저장 기능을 추가해보세요!