import 'dart:async'; import 'package:sqflite/sqflite.dart'; import 'package:fooder/models/product.dart'; import 'package:fooder/storage/based.dart'; class ProductStorage extends StorageBased { ProductStorage({required super.db}); static Future createTable(Batch batch) async { batch.execute(''' CREATE TABLE product( id INTEGER, name TEXT, barcode TEXT, calories REAL, protein REAL, carb REAL, fat REAL, fiber REAL, usage_count_cached INTEGER ) '''); } Future> list({String? name, String? barcode}) async { var result = await db.query('product', where: 'name LIKE ? AND barcode LIKE ?', whereArgs: ['%$name%', '%$barcode%'], orderBy: 'usage_count_cached DESC'); return result.map((e) => Product.fromJson(e)).toList(); } Future get(int id) async { var result = await db.query('product', where: 'id = ?', whereArgs: [id]); if (result.isEmpty) { return null; } return Product.fromJson(result.first); } Future insert(Product product) async { await db.insert('product', product.toMap(), conflictAlgorithm: ConflictAlgorithm.replace); } Future bulkInsert(List products) async { var batch = db.batch(); for (var product in products) { batch.insert('product', product.toMap(), conflictAlgorithm: ConflictAlgorithm.replace); } await batch.commit(noResult: true); } }