LanguageDataProvider.network constructor

LanguageDataProvider.network(
  1. String parentUrl, {
  2. Client? client,
  3. Map<String, String>? headers,
})

Create an instance of data from network.

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

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

Implementation

factory LanguageDataProvider.network(
  String parentUrl, {
  Client? client,
  Map<String, String>? headers,
}) {
  return LanguageDataProvider._((code) async {
    String path = Utils.removeLastSlash(parentUrl);
    final uri =
        Uri.parse('$path/language_helper/languages/${code.code}.json');
    String json = await Utils.getUrl(uri, client: client, headers: headers);
    if (json.isNotEmpty) {
      return {code: LanguageDataSerializer.valuesFromJson(json)};
    }
    return {};
  }, () async {
    String path = Utils.removeLastSlash(parentUrl);
    final uri = Uri.parse('$path/language_helper/codes.json');
    final json = await Utils.getUrl(uri, client: client, headers: headers);
    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 {};
  });
}