import 'dart:io'; import 'package:aidedejeu_flutter/models/items.dart'; import 'package:flutter/services.dart'; import 'package:path/path.dart'; import 'package:sqflite/sqflite.dart'; Database _database; Future get database async { if (_database != null) return _database; _database = await getDatabaseInstance(); return _database; } Future getDatabaseInstance() async { var databasesPath = await getDatabasesPath(); var path = join(databasesPath, "library.db"); var exists = await databaseExists(path); exists = false; if (!exists) { print("Creating new copy from asset"); try { await Directory(dirname(path)).create(recursive: true); } catch (_) {} ByteData data = await rootBundle.load(join("assets", "library.db")); List bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); await File(path).writeAsBytes(bytes, flush: true); } else { print("Opening existing database"); } return await openDatabase(path, readOnly: true); } Future getItemWithId(String id) async { print("getItemWithId " + id); final db = await database; var response = await db.query( "Items", where: "Id = ? OR RootId = ?", whereArgs: [id, id] ); if (response.isEmpty) { print("Id not found"); } return response.isNotEmpty ? itemFromMap(response.first) : null; } Future loadChildrenItems(Item item, List filters) async { print("getChildrenItems " + (item?.ItemType ?? "")); if (item.ItemType.endsWith("Items")) { String itemType = item.ItemType.substring(0, item.ItemType.length - 1); String family = ""; if (item is FilteredItems) { family = (item as FilteredItems)?.Family ?? ""; } String whereFilter = ""; if(filters != null) { filters.forEach((filter) { if(filter.selectedValues.isNotEmpty) { whereFilter = " AND (${filter.name} LIKE '%" + filter.selectedValues.join("%' OR ${filter.name} LIKE '%") + "%')"; } }); } print(whereFilter); final db = await database; var response = await db.query( "Items", where: "ItemType = ? AND Family = ?" + whereFilter, whereArgs: [itemType, family], orderBy: "NormalizedName" ); if (response.isEmpty) { print("Children not found"); } item.Children = response.isNotEmpty ? itemsFromMapList(response) : null; } return item; }