import method Null safety

Future<void> import(
  1. String jsonEncoded,
  2. 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);
}