Future<void>
import(- String jsonEncoded,
- dynamic localDatabase
)
Implementation
Future<void> import(
final String jsonEncoded,
final LocalDatabase localDatabase,
) async {
final dynamic map = json.decode(jsonEncoded);
if (map is! Map<String, dynamic>) {
throw Exception('Expected Map<String, dynamic>');
}
final dynamic list = map['list'];
if (list is! List<dynamic>) {
throw Exception('Expected List<dynamic>');
}
final List<String> inputBarcodes = <String>[];
for (final dynamic barcode in list) {
inputBarcodes.add(barcode as String);
}
final SearchResult searchResult = await OpenFoodAPIClient.getProductList(
ProductQuery.getUser(),
ProductListQueryConfiguration(
inputBarcodes,
fields: ProductQuery.fields,
language: ProductQuery.getLanguage(),
country: ProductQuery.getCountry(),
),
);
if (searchResult.products == null) {
return;
}
final DaoProduct daoProduct = DaoProduct(localDatabase);
final DaoProductList daoProductList = DaoProductList(localDatabase);
final Map<String, Product> products = <String, Product>{};
for (final Product product in searchResult.products!) {
products[product.barcode!] = product;
await daoProduct.put(product);
}
final List<String> barcodes = <String>[];
for (final String barcode in inputBarcodes) {
if (products.containsKey(barcode)) {
barcodes.add(barcode);
}
}
final ProductList productList = ProductList.history();
productList.set(barcodes, products);
daoProductList.put(productList);
}