Héctor Álvarez
La implementación de SharedPreferences nos ha mostrado una forma de guardar datos localmente de manera sencilla mediante un modelo clave/valor.
Pero si trabajamos con muchos datos es difícil de mantenerlos y tendríamos que parsear los datos cada vez que queramos acceder o guardar cambios.
También los datos son guardados sin encriptación y pueden ser vista por todos los que puedan navegar a su carpeta de apliación.
Si queremos guardar muchos datos de manera local es conveniente usar una base de datos como Sqflite o Hive.
Hive es una base de datos NoSQL extremanamente rápida.
De la misma manera que SharedPreferences utiliza el modelo clave/valor, aunque en este caso la clave sería a modo de caja de datos donde cada caja de datos puede contener una lista de objetos con su key y atributos de objeto.
Es una base de datos encriptada, con el algoritmo AES-256, por lo que los datos no pueden ser vistos desde fuera de la aplicación.
Agregamos las dependencias hive_ce y las dependencias de desarrollo build_runner (auto generador y hive_ce_generator).
Acabamos de crear una entidad para obtener los productos, esta misma entidad la reutilizaremos para la base de datos HIVE.
Tenemos que crear casos de uso y repositorios específicos para el apartado de base de datos.
Luego tenemos que crear los tipos de hive, las cajas y los adaptadores, luego ejecutar el generador y registrarlos en main.
En este archivo creamos constantes las cuales serán los ID's de cada adapter de Hive, para poder separarlos dentro de la misma caja de objetos (ya que product y el enum Categories están en el mismo archivo).
Creamos un archivo de constantes para las cajas de datos de Hive.
Es un string que contiene el nombre de cada caja de datos, en este caso sólo creamos una caja de datos para los objetos de productos y las Categirías.
Con este comando se generan los archivos faltantes, o sea, las partes .g.dart.
Este comando debería generar los tres siguientes archivos:
hive_adapters.g.dart
hive_adapters.g.yaml
hive_registrar.g.dart
En este main implementamos solamente una caja, pero a medida que la aplicación crece, tendremos que asignar/abrir cuántas cajas de datos necesitemos.
Tenemos ya toda la base para implementar nuestra base de datos local, sólo falta probarla en una pantalla
Crearemos dos pantallas, una de ordenes y otra de inventario que agreguemos desde las ordenes.
La pantalla ordenes obtendrá los datos desde el repositorio local; tendrán un botón para registrarlos en DB (repositorio DB).
La pantalla inventario obtendrá los datos sólo desde el repositorio db; en esta pantalla podremos modificar la cantidad y eliminar un registro.