saveProduct static method

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

Add the given product to the database.

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

  User myUser = User(userId: "username", password: "secret_password");

  Product newProduct = Product(
      barcode: "0000000000000",
      productName: "Example Product",
      quantity: "200g",
      brands: "Example Brand",
      lang: OpenFoodFactsLanguage.FRENCH,
      ingredientsText: "Ingredient 1, Ingredient 2, Ingredient 3",
      categories: "Category 1, Category 2"
      ...
  );

  Status result = await OpenFoodAPIClient.saveProduct(myUser, newProduct);

  if(result.status != 1) {
    print("An error occured while sending the product : ${result.statusVerbose}");
    return;
  }

  print("Upload was successful");

Implementation

static Future<Status> saveProduct(
  final User user,
  final Product product, {
  final UriProductHelper uriHelper = uriHelperFoodProd,
  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',
  );

  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}';
      for (final option in PerSize.values) {
        final int pos = key.indexOf('_${option.offTag}');
        if (pos != -1) {
          key = key.substring(0, pos);
        }
      }
      parameterMap[key] = entry.value;
    }
  }
  parameterMap.remove('nutriments');
  final Response response = await HttpHelper().doPostRequest(
    productUri,
    parameterMap,
    user,
    uriHelper: uriHelper,
    addCredentialsToBody: true,
  );
  return Status.fromApiResponse(response.body);
}