change method

Future<void> change(
  1. LanguageCodes toCode
)

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!');
}