52 lines
1.3 KiB
Dart
52 lines
1.3 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:sqflite/sqflite.dart';
|
|
import 'package:fooder/models/product.dart';
|
|
|
|
class ProductStorage {
|
|
Database db;
|
|
|
|
ProductStorage({required this.db});
|
|
|
|
static Future<void> createTable(Database db, int version) async {
|
|
await db.execute('''
|
|
CREATE TABLE product(
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
barcode TEXT,
|
|
calories NOT NULL,
|
|
protein REAL NOT NULL,
|
|
carb REAL NOT NULL,
|
|
fat REAL NOT NULL,
|
|
fiber REAL NOT NULL
|
|
)
|
|
''');
|
|
}
|
|
|
|
Future<List<Product>> list() async {
|
|
var result = await db.query('product');
|
|
return result.map((e) => Product.fromJson(e)).toList();
|
|
}
|
|
|
|
Future<Product?> 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<void> insert(Product product) async {
|
|
await db.insert('product', product.toMap(),
|
|
conflictAlgorithm: ConflictAlgorithm.replace);
|
|
}
|
|
|
|
Future<void> bulkInsert(List<Product> products) async {
|
|
var batch = db.batch();
|
|
for (var product in products) {
|
|
batch.insert('product', product.toMap(),
|
|
conflictAlgorithm: ConflictAlgorithm.replace);
|
|
}
|
|
await batch.commit(noResult: true);
|
|
}
|
|
}
|