LanguageDataProvider.asset constructor

LanguageDataProvider.asset(
  1. String parentPath
)

Create an instance of data from asset.

The parentPath is a path that point to codes.json file but not includes it.

Ex: assets/resources/language_helper/codes.json and your languages is in assets/resources/language_helper/languages/en.json... The parentPath will be assets/resources.

Implementation

factory LanguageDataProvider.asset(String parentPath) {
  return LanguageDataProvider._((code) async {
    String path = Utils.removeLastSlash(parentPath);
    final uri =
        Uri.parse('$path/language_helper/languages/${code.code}.json');
    String json = await _loadAsset(uri.path);
    if (json.isNotEmpty) {
      return {code: LanguageDataSerializer.valuesFromJson(json)};
    }
    return {};
  }, () async {
    String path = Utils.removeLastSlash(parentPath);
    final uri = Uri.parse('$path/language_helper/codes.json');
    final json = await _loadAsset(uri.path);
    if (json.isNotEmpty) {
      final decoded = jsonDecode(json).cast<String>() as List<String>;
      final set = decoded.map((e) => LanguageCodes.fromCode(e)).toSet();
      return Future.value(set);
    }
    return {};
  });
}