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(); } }