getParametersMap method
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;
}