// Copyright 2021 The Flutter team. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:hive/hive.dart'; class HiveService { static Future<bool> addBox<T>(T item, String boxName) async { final openBox = await Hive.openLazyBox<T>( boxName, ); final List<T> existingProducts = await getBoxes(boxName); if (!existingProducts.contains(item)) { await openBox.add(item); return true; } return false; } static Future addBoxes<T>(List<T> items, String boxName) async { final openBox = await Hive.openLazyBox<T>( boxName, ); final Set<T> existingProducts = Set.unmodifiable(await getBoxes(boxName)); for (final item in items) { if (!existingProducts.contains(item)) { await openBox.add(item); } } } static Future deleteBox<T>(T item, String boxName) async { final openBox = await Hive.openLazyBox<T>( boxName, ); final List<T> boxes = await getBoxes(boxName); for (final box in boxes) { if (box == item) { await openBox.deleteAt(boxes.indexOf(item)); } } } static Future updateBox<T>(T item, T newItem, String boxName) async { final openBox = await Hive.openLazyBox<T>( boxName, ); final List<T> boxes = await getBoxes(boxName); for (final box in boxes) { if (box == item) { await openBox.putAt(boxes.indexOf(item), newItem); } } } static Future<List<T>> getBoxes<T>(String boxName, [String? query]) async { final openBox = await Hive.openLazyBox<T>(boxName); final length = openBox.length; final boxList = <T>[ for (int i = 0; i < length; i++) await openBox.getAt(i) as T ]; return boxList; } }