initializeAllLocales method

Future<bool> initializeAllLocales()

Implementation

Future<bool> initializeAllLocales() {
  var notInitializedLocales = getNotInitializedLocales(true);
  if (notInitializedLocales.isEmpty) return Future.value(false);

  var initializations = <String, int>{};

  var completer = Completer<bool>();

  var initOrder = getLocalesSequence(getCurrentLocale());

  for (var l in initOrder.toList(growable: false)) {
    var similarLocales = getSimilarLocales(l);
    similarLocales.removeWhere((s) => initOrder.contains(s));
    initOrder.addAll(similarLocales);
  }

  initOrder.addAll(notInitializedLocales);

  for (var l in initOrder) {
    l = Intl.canonicalizedLocale(l);

    if (initializations.containsKey(l) ||
        isInitializedLocale(l) ||
        isInitializedLocaleWithAlternative(l)) {
      continue;
    }

    var futureInit = _callInitializeLocale(l, true);

    initializations[l] = 0;

    futureInit.then((ok) {
      _initializedLocales[l] = ok;

      initializations[l] = ok ? 1 : 2;

      var completed =
          initializations.values.where((v) => v == 0).toList().isEmpty;

      if (completed) {
        var anyInit =
            initializations.values.where((v) => v == 1).toList().isNotEmpty;

        _onInitializeAllLocales();

        completer.complete(anyInit);
      }
    });
  }

  if (initializations.isEmpty) {
    completer.complete(false);
  }

  return completer.future;
}