49 lines
1.3 KiB
Dart
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();
|
|
}
|
|
}
|