change method
Change the language to this code
Implementation
Future<void> change(LanguageCodes toCode) async {
if (!codes.contains(toCode)) {
printDebug('$toCode is not available in `data` or `dataOverrides`');
if (!_useInitialCodeWhenUnavailable) {
printDebug(
'Does not allow using the initial code => Cannot change the language.');
return;
} else {
if (codes.contains(_initialCode)) {
printDebug(
'`useInitialCodeWhenUnavailable` is true => Change the language to $_initialCode');
_currentCode = _initialCode;
} else {
printDebug(
'`useInitialCodeWhenUnavailable` is true but the `initialCode` is not available in `data` or `dataOverrides` => Cannot change the language');
return;
}
}
} else {
printDebug('Set currentCode to $toCode');
_currentCode = toCode;
}
_dataProvider = await _chooseTheBestDataProvider(_dataProviders, false);
_dataOverridesProvider =
await _chooseTheBestDataProvider(_dataOverridesProviders, true);
if (!_data.containsKey(_currentCode)) {
_data.clear();
_dataOverrides.clear();
_data.addAll(await _dataProvider.getData(code));
_dataOverrides.addAll(await _dataOverridesProvider.getData(code));
}
printDebug('Change language to $toCode for ${_states.length} states');
for (var state in _states) {
state.updateLanguage();
}
_streamController.sink.add(toCode);
if (_onChanged != null) {
_onChanged!(toCode);
}
// Save to local memory
if (_isAutoSave) {
printDebug('Save this $toCode to local memory');
SharedPreferences.getInstance().then((pref) {
pref.setString(_autoSaveCodeKey, toCode.code);
});
}
printDebug('Changing completed!');
}