[flutter] shared_preferences를 이용하여 사용자가 선택한 앱 테마를 앱 내에서 로드하는 방법은?

앱에 사용자 정의 테마를 적용하고 이를 유지하기 위해서는 SharedPreferences 패키지를 사용하는 것이 좋습니다. 이를 통해 사용자가 선택한 테마 설정을 저장하고 앱이 다시 시작될 때 이를 로드할 수 있습니다.

1. shared_preferences 패키지 추가

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

dependencies:
  shared_preferences: ^2.0.6

이후, 터미널에서 아래 명령어를 실행하여 패키지를 가져옵니다.

flutter pub get

2. 테마 변경 및 저장

테마를 변경하는 데 사용하는 버튼에 대한 처리기를 작성합니다. 선택한 테마를 SharedPreferences에 저장하는 예제 코드는 다음과 같습니다.

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

// ...

void _changeTheme(ThemeData theme) async {
  final prefs = await SharedPreferences.getInstance();
  prefs.setInt('theme', theme == ThemeData.light() ? 1 : 2);
  // 기타 로직: 테마 적용 및 화면 갱신
}

3. 저장된 테마 로드

앱이 시작될 때 저장된 테마를 로드하여 적용합니다.

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

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

class MyApp extends StatelessWidget {
  Future<ThemeData> _loadTheme() async {
    final prefs = await SharedPreferences.getInstance();
    final themeId = prefs.getInt('theme') ?? 1;  // 기본 테마
    return themeId == 1 ? ThemeData.light() : ThemeData.dark();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<ThemeData>(
      future: _loadTheme(),
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          return MaterialApp(
            theme: snapshot.data,
            // 기타 설정
          );
        } else {
          return CircularProgressIndicator();  // 로딩 중 표시
        }
      },
    );
  }
}

이제, 사용자가 선택한 테마가 SharedPreferences에 저장되고 앱을 다시 실행하면 해당 테마가 로드되어 적용됩니다.

이 방법을 통해 사용자가 선택한 테마를 저장하고 Flutter 앱에서 유지하는 방법을 설명했습니다.SharedPreferences를 사용하여 간단하게 사용자 설정을 유지하는 것이 가능합니다.

더 자세한 내용은 SharedPreferences 패키지 문서를 참조할 수 있습니다.