You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
samples/experimental/linting_tool/lib/repository/hive_service.dart

76 lines
1.8 KiB

// 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;
}
}