yumi-flutter/lib/services/localization/localization_manager.dart
2026-05-15 21:20:29 +08:00

49 lines
1.3 KiB
Dart

import 'dart:async';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:yumi/app/constants/sc_global_config.dart';
import 'package:yumi/app_localizations.dart';
import 'package:yumi/shared/data_sources/sources/local/data_persistence.dart';
class LocalizationManager with ChangeNotifier {
Locale? _locale;
Locale? get locale => _locale;
LocalizationManager() {
_locale = _resolveInitialLocale();
if (_locale != null) {
SCGlobalConfig.lang = _locale!.languageCode;
}
}
Locale _resolveInitialLocale() {
final language = DataPersistence.getLang();
if (language.isEmpty) {
final systemLocale = ui.PlatformDispatcher.instance.locale;
return _localeFromLanguageCode(systemLocale.languageCode);
}
return _localeFromLanguageCode(language);
}
Locale _localeFromLanguageCode(String languageCode) {
return Locale(
SCAppLocalizations.resolveSupportedLanguageCode(languageCode),
'',
);
}
void changeAppLanguage(Locale locale) {
if (_locale?.languageCode == locale.languageCode &&
_locale?.countryCode == locale.countryCode) {
return;
}
_locale = _localeFromLanguageCode(locale.languageCode);
SCGlobalConfig.lang = _locale!.languageCode;
unawaited(DataPersistence.setLang(_locale!.languageCode));
notifyListeners();
}
}