49 lines
1.4 KiB
Dart
49 lines
1.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:hive/hive.dart';
|
|
import 'dart:ui' as ui;
|
|
|
|
class LocaleProvider extends ChangeNotifier {
|
|
late Box<String> _localeBox;
|
|
Locale _locale = const Locale('ko');
|
|
|
|
static const List<String> supportedLanguages = ['en', 'ko', 'ja', 'zh'];
|
|
|
|
Locale get locale => _locale;
|
|
|
|
Future<void> init() async {
|
|
_localeBox = await Hive.openBox<String>('locale');
|
|
|
|
// 저장된 언어 설정 확인
|
|
final savedLocale = _localeBox.get('locale');
|
|
|
|
if (savedLocale != null) {
|
|
// 저장된 언어가 있으면 사용
|
|
_locale = Locale(savedLocale);
|
|
} else {
|
|
// 저장된 언어가 없으면 시스템 언어 감지
|
|
final systemLocale = ui.PlatformDispatcher.instance.locale;
|
|
|
|
// 시스템 언어가 지원되는 언어인지 확인
|
|
if (supportedLanguages.contains(systemLocale.languageCode)) {
|
|
_locale = Locale(systemLocale.languageCode);
|
|
} else {
|
|
// 지원되지 않는 언어면 영어 사용
|
|
_locale = const Locale('en');
|
|
}
|
|
|
|
// 감지된 언어 저장
|
|
await _localeBox.put('locale', _locale.languageCode);
|
|
}
|
|
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> setLocale(String languageCode) async {
|
|
if (_locale.languageCode != languageCode) {
|
|
_locale = Locale(languageCode);
|
|
await _localeBox.put('locale', languageCode);
|
|
notifyListeners();
|
|
}
|
|
}
|
|
}
|