toJson method

  1. @override
Map<String, dynamic> toJson()

Implementation

@override
Map<String, dynamic> toJson() {
  final json = _$ProductToJson(this);

  // Defensive keys copy to modify map while iterating
  final keys = json.keys.toList();

  for (final key in keys) {
    // NOTE: '_tags_in_languages' are not supported because tags translation
    // is done automatically on the server.
    if (key.endsWith('_in_languages')) {
      final value = json.remove(key) as Map<String, dynamic>;
      for (final entry in value.entries) {
        final langKey = entry.key;
        final lang = LanguageHelper.fromJson(langKey);
        if (lang == OpenFoodFactsLanguage.UNDEFINED) {
          throw StateError('Cannot send localized field without '
              'a proper language. Received: $langKey');
        }
        final keyNoLangs = key.substring(0, key.indexOf('_in_languages'));
        final realKey = '${keyNoLangs}_${lang.offTag}';
        json[realKey] = entry.value;
      }
    }
  }

  return json;
}