Persistir data usando HiveDB

- Andrés Cruz

In english

HiveDB junto con los sharedpreferences que vimos en una entrada anterior, es uno de las formas populares que tenemos en persistir datos en nuestra aplicación en Flutter; HiveDB tiene una API sencilla para almacenar y obtener los datos como vamos a ver en esta entrada.

Instalar y configurar HiveDB

Comencemos agregando la dependencia en nuestro archivo:

pubspec.yaml

dependencies: 
    hive:
    hive_flutter:

Ahora, falta inicializarlo, para eso, agregamos la siguiente línea de código en el main.dart:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Hive.initFlutter();
  runApp(ProviderScope(child: MyApp()));
}

Es el código más o menos típico que empleamos al momento de inicializar procesos asíncronas a nivel de toda la aplicación y con Hive.initFlutter() inicializamos Hive.

Como vamos a ver en el siguiente apartado, Hive trabaja con el esquema clave valor, en donde el valor puede ser una primitiva o un mapa.

Crear estructura básica en Hive

Al igual que ocurre con los sharedpreferences, debemos de crear una estructura con la cual podemos gestionar los datos de manera persistentes; en Hive, donde almacenamos los datos, se conocen como "boxes" los cuales tienen un nombre para hacer el seguimiento y con esto, obtener y establecer datos:

class MyListService {
  static MyListService? _instance;
  final String boxName = 'myList';
  MyListService._();
  static MyListService get instance {
    if (_instance == null) {
      _instance = WatchlistService._();
    }
    return _instance!;
  }
}

Con la estructura anterior, creamos una instancia única la cual accedemos para gestionar nuestros datos; el siguiente paso consiste en definir los métodos para almacenar los datos; este primer método permite crear un nuevo registro para un item o actualizar si el ID existe:

Future<void> addToMyList(int id, Map<String, 
    dynamic> item) async {
  final box = await Hive.openBox<Map<String, 
      dynamic>>(boxName);
  if (box.get(id) == null) {
    box.put(id, item);
  }
}

El código anterior permite abrir la box, para que podamos administrar la misma, en este caso, hacer el pub del item mediante el ID.

Para remover un item desde hive, tenemos:

Future<void> removeFromMyList(int id) async {
  final box = await Hive.openBox(boxName);
  box.delete(id);
}

También, podemos crear un método que verifica si un item esta en la lista mediante el ID:

Future<bool> isInMyList(int id) async {
  final box = await Hive.openBox(boxName);
  return box.containsKey(id);
}

Finalmente, tenemos un método para obtener todos los datos de la lista:

Future<Iterable<Map<String, dynamic>>> geMylist() async {
  Final box = await Hive.openBox<Map<String, 
      dynamic>>(boxName);
  return box.values;
}

Estos son solamente algunos métodos que puedes crear, pero, existen otros que puedes definir a gusto según tus necesidades.

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.