[flutter] shared_preferences를 사용하여 사용자가 선택한 언어를 앱 내에서 적용하는 방법은?

안녕하세요! Flutter 앱에서 사용자가 선택한 언어 설정을 저장하고 적용하는 방법에 대해 알아보겠습니다. 이에 대한 예제 코드를 포함하여 설명드리겠습니다.

1. shared_preferences 패키지 추가

먼저 shared_preferences 패키지를 프로젝트에 추가합니다. 이 패키지는 키-값 쌍의 간단한 데이터를 지속적으로 저장할 수 있도록 해줍니다. pubspec.yaml 파일에 아래와 같이 패키지를 추가합니다.

dependencies:
  shared_preferences: ^2.0.7

의존성을 추가한 후에는 pub get을 실행하여 패키지를 다운로드하고 사용할 준비를 완료합니다.

2. 사용자가 선택한 언어 저장

언어 선택에 따라 사용자가 설정한 언어를 shared_preferences를 사용하여 저장합니다. 다음은 예제 코드입니다.

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

void setLanguage(String languageCode) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  await prefs.setString('language', languageCode);
}

3. 저장된 언어 적용

앱이 시작될 때 저장된 언어를 확인하고 이를 적용하는 방법입니다.

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

void main() {
  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
      .then((_) {
    runApp(MyApp());
  });
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: getLanguage(),
      builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
        if (snapshot.hasData) {
          return MaterialApp(
            title: 'My App',
            locale: Locale(snapshot.data),
            supportedLocales: [
              const Locale('en', 'US'),
              const Locale('ko', 'KR'),
            ],
            localizationsDelegates: [
              // 여기에 로컬라이제이션을 위한 델리게이트들을 추가
            ],
            home: MyHomePage(),
          );
        } else {
          return CircularProgressIndicator();
        }
      },
    );
  }
}

Future<String> getLanguage() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  return prefs.getString('language') ?? 'en'; // 기본값은 영어로 설정
}

위 코드에서 ‘language’라는 키로 저장된 사용자의 언어 설정을 불러옵니다. 저장된 값이 없을 경우 기본값으로 영어가 설정됩니다.

호출된 getLanguage 함수에서 반환된 언어 코드를 사용하여 MaterialApplocale을 설정합니다. 이제 사용자가 선택한 언어가 앱 내에서 적용됩니다.

이상으로 Flutter에서 shared_preferences를 사용하여 사용자가 선택한 언어를 앱 내에서 적용하는 방법을 살펴보았습니다. 부족한 부분이 있거나 질문이 있다면 언제라도 물어보세요!