saveProduct static method

Future<Status> saveProduct(
  1. User user,
  2. Product product, {
  3. QueryType? queryType,
  4. OpenFoodFactsCountry? country,
  5. OpenFoodFactsLanguage? language,
})

Add the given product to the database. Returns a Status object as result.

Please read the language mechanics explanation if you intend to display or update data in specific language: https://github.com/openfoodfacts/openfoodfacts-dart/blob/master/DOCUMENTATION.md#about-languages-mechanics

Implementation

static Future<Status> saveProduct(
  final User user,
  final Product product, {
  final QueryType? queryType,
  final OpenFoodFactsCountry? country,
  final OpenFoodFactsLanguage? language,
}) async {
  final Map<String, String> parameterMap = <String, String>{};
  parameterMap.addAll(user.toData());
  parameterMap.addAll(product.toServerData());
  if (language != null) {
    parameterMap['lc'] = language.offTag;
  }
  if (country != null) {
    parameterMap['cc'] = country.offTag;
  }

  var productUri = UriHelper.getPostUri(
    path: '/cgi/product_jqm2.pl',
    queryType: queryType,
  );

  if (product.nutriments != null) {
    final Map<String, String> rawNutrients = product.nutriments!.toData();
    for (final MapEntry<String, String> entry in rawNutrients.entries) {
      String key = 'nutriment_${entry.key}';
      final int pos = key.indexOf('_100g');
      if (pos != -1) {
        key = key.substring(0, pos);
      }
      parameterMap[key] = entry.value;
    }
  }
  parameterMap.remove('nutriments');
  final Response response = await HttpHelper().doPostRequest(
    productUri,
    parameterMap,
    user,
    queryType: queryType,
    addCredentialsToBody: true,
  );
  return Status.fromApiResponse(response.body);
}