getParametersMap method

Map<String, String> getParametersMap()

Returns the corresponding API URI parameter map

Implementation

Map<String, String> getParametersMap() {
  final Map<String, String> result = {};

  //the languages added to the query parameters, not named languages to avoid confusion
  late final List<OpenFoodFactsLanguage> queryLanguages;

  if (language != null) {
    queryLanguages = [language!];
  } else if (languages != null) {
    queryLanguages = languages!.toList();
  } else if (OpenFoodAPIConfiguration.globalLanguages != null) {
    queryLanguages = OpenFoodAPIConfiguration.globalLanguages!;
  } else {
    queryLanguages = const <OpenFoodFactsLanguage>[];
  }

  if (queryLanguages.isNotEmpty) {
    result.putIfAbsent(
        'lc', () => queryLanguages.map((e) => e.offTag).join(','));
    // the result looks like crap if we put several languages
    result.putIfAbsent('tags_lc', () => queryLanguages.first.offTag);
  }

  final String? countryCode = computeCountryCode();
  if (countryCode != null) {
    result.putIfAbsent('cc', () => countryCode);
  }

  if (fields != null) {
    final bool ignoreFieldsFilter = fields!.any(
      (field) => field == ProductField.ALL,
    );
    if (!ignoreFieldsFilter) {
      final fieldsStrings = convertFieldsToStrings(fields!, queryLanguages);
      result.putIfAbsent('fields', () => fieldsStrings.join(','));
    }
  }

  int filterTagCount = 0;
  for (final p in additionalParameters) {
    if (p is TagFilter) {
      TagFilter tf = p;
      result.putIfAbsent('tagtype_$filterTagCount', () => tf.getTagType());
      result.putIfAbsent(
          'tag_contains_$filterTagCount', () => tf.getContains());
      result.putIfAbsent('tag_$filterTagCount', () => tf.getTagName());
      filterTagCount++;
    } else {
      result.putIfAbsent(p.getName(), () => p.getValue());
    }
  }

  return result;
}