Product.fromJson constructor
Product.fromJson(
- Map<String, dynamic> json
)
Implementation
factory Product.fromJson(Map<String, dynamic> json) {
final Product result = _$ProductFromJson(json);
for (final String key in json.keys) {
if (key.contains('debug')) {
continue;
}
// If the JSON contained *_in_languages fields,
// _$ProductFromJson(json) already decoded them
if (key.endsWith('_in_languages')) {
continue;
}
// The OFF API can give values in all available languages for some
// of the fields ('product_name_languages'), and in a requested list of
// languages for an additional number of fields
// (`product_name_[2 letter language code]`).
// We store those values in a more structured maps like
// [productNameInLanguages].
if (key == ProductField.NAME_ALL_LANGUAGES.offTag) {
final Map<OpenFoodFactsLanguage, String>? localized =
_getLocalizedStrings(json[key]);
if (localized != null) {
result.productNameInLanguages ??= {};
result.productNameInLanguages!.addAll(localized);
}
} else if (key == ProductField.INGREDIENTS_TEXT_ALL_LANGUAGES.offTag) {
final Map<OpenFoodFactsLanguage, String>? localized =
_getLocalizedStrings(json[key]);
if (localized != null) {
result.ingredientsTextInLanguages ??= {};
result.ingredientsTextInLanguages!.addAll(localized);
}
} else if (key == ProductField.PACKAGING_TEXT_ALL_LANGUAGES.offTag) {
final Map<OpenFoodFactsLanguage, String>? localized =
_getLocalizedStrings(json[key]);
if (localized != null) {
result.packagingTextInLanguages ??= {};
result.packagingTextInLanguages!.addAll(localized);
}
} else if (key.startsWith(ProductField.NAME_IN_LANGUAGES.offTag)) {
final OpenFoodFactsLanguage lang =
_langFrom(key, ProductField.NAME_IN_LANGUAGES.offTag);
if (lang != OpenFoodFactsLanguage.UNDEFINED) {
result.productNameInLanguages ??= {};
result.productNameInLanguages![lang] = json[key];
}
} else if (key
.startsWith(ProductField.CATEGORIES_TAGS_IN_LANGUAGES.offTag)) {
final OpenFoodFactsLanguage lang =
_langFrom(key, ProductField.CATEGORIES_TAGS_IN_LANGUAGES.offTag);
final values = _jsonValueToList(json[key]);
if (lang != OpenFoodFactsLanguage.UNDEFINED && values != null) {
result.categoriesTagsInLanguages ??= {};
result.categoriesTagsInLanguages![lang] = values;
}
} else if (key
.startsWith(ProductField.INGREDIENTS_TAGS_IN_LANGUAGES.offTag)) {
final OpenFoodFactsLanguage lang =
_langFrom(key, ProductField.INGREDIENTS_TAGS_IN_LANGUAGES.offTag);
final values = _jsonValueToList(json[key]);
if (lang != OpenFoodFactsLanguage.UNDEFINED && values != null) {
result.ingredientsTagsInLanguages ??= {};
result.ingredientsTagsInLanguages![lang] = values;
}
} else if (key
.startsWith(ProductField.IMAGES_FRESHNESS_IN_LANGUAGES.offTag)) {
final OpenFoodFactsLanguage lang =
_langFrom(key, ProductField.IMAGES_FRESHNESS_IN_LANGUAGES.offTag);
if (lang != OpenFoodFactsLanguage.UNDEFINED) {
final Map<ImageField, int> values =
_jsonValueToImagesFreshness(json[key], lang);
result.imagesFreshnessInLanguages ??= {};
result.imagesFreshnessInLanguages![lang] = values;
}
} else if (key.startsWith(ProductField.LABELS_TAGS_IN_LANGUAGES.offTag)) {
final OpenFoodFactsLanguage lang =
_langFrom(key, ProductField.LABELS_TAGS_IN_LANGUAGES.offTag);
final values = _jsonValueToList(json[key]);
if (lang != OpenFoodFactsLanguage.UNDEFINED && values != null) {
result.labelsTagsInLanguages ??= {};
result.labelsTagsInLanguages![lang] = values;
}
} else if (key
.startsWith(ProductField.COUNTRIES_TAGS_IN_LANGUAGES.offTag)) {
final OpenFoodFactsLanguage lang =
_langFrom(key, ProductField.COUNTRIES_TAGS_IN_LANGUAGES.offTag);
final values = _jsonValueToList(json[key]);
if (lang != OpenFoodFactsLanguage.UNDEFINED && values != null) {
result.countriesTagsInLanguages ??= {};
result.countriesTagsInLanguages![lang] = values;
}
} else if (key
.startsWith(ProductField.INGREDIENTS_TEXT_IN_LANGUAGES.offTag)) {
final OpenFoodFactsLanguage lang =
_langFrom(key, ProductField.INGREDIENTS_TEXT_IN_LANGUAGES.offTag);
if (lang != OpenFoodFactsLanguage.UNDEFINED) {
result.ingredientsTextInLanguages ??= {};
result.ingredientsTextInLanguages![lang] = json[key];
}
} else if (key
.startsWith(ProductField.PACKAGING_TEXT_IN_LANGUAGES.offTag)) {
final OpenFoodFactsLanguage lang =
_langFrom(key, ProductField.PACKAGING_TEXT_IN_LANGUAGES.offTag);
if (lang != OpenFoodFactsLanguage.UNDEFINED) {
result.packagingTextInLanguages ??= {};
result.packagingTextInLanguages![lang] = json[key];
}
}
}
return result;
}