Flutter Hive

El otro día decía que quería escribir acerca de las bases de datos No-SQL. Pues bien, va a ser hoy cuando escriba acerca de ello y, en particular, de una base de datos para Flutter llamada Hive. Sé que este es un tema muy técnico para el blog, pero a medida que voy emergiendo del Big Crunch parece que me voy yendo por ahí, y este blog es un soporte, en parte, para ese proceso de encontrar la siguiente cosa más allá de este gigantesco trauma que ha marcado profundamente los últimos 30 años de mi vida. Así que vamos hoy con Flutter Hive.

Hive significa “colmena” en inglés, si estoy en lo cierto. Y supongo que el nombre viene porque se trata de una base de datos que se organiza en cajas, tal vez como las celdas de una colmena. Lo encuentro un poco pillado por los pelos, pero qué más da.

El asunto es que estoy aprendiendo, a saltos, acerca de este entorno de desarrollo para aplicaciones móviles, y me está gustando mucho. Apenas rasco una hora cada día para hacer algo, pero lo disfruto mucho.

Estoy haciendo una pequeña aplicación para la gestión de las finanzas personales, y en ella tengo que guardar en una base de datos los gastos que voy realizando. Cada gasto comprende un importe (amount) y una descripción (description). El primero es requerido mientras que el segundo es opcional.

Yo sé poco de clases, de programación orientada a objetos. Tenía que lidiar con muchas en mi antiguo trabajo pero rara vez escribía una, ya que a menudo solventaba los problemas simplemente a base de funciones. A veces ni eso, simplemente añadiendo código en funciones ya existentes.

Y ahora… bueno, pues estoy escribiendo mis clases. Estoy aprendiendo mucho.

Aquí una clase que define el objeto a guardar en la base de datos. ¿Cómo se escribe una clase en Dart? ¿Cómo se escribe el constructor de la clase? ¿Cómo le digo que un parámetro es requerido y el otro no?

He creado otra clase que abstrae la comunicación con la base de datos por, si en algún momento la cambiara, que el resto del código siguiera siendo funcional. “He creado una clase que abstrae la comunicación la base de datos” es una de esas frases que me provocan una gran satisfacción. Me siento súper-hacker, y me encanta.

Y Hive es una base de datos no-SQL. ¿Qué significa eso?

La mayoría de BBDD, al menos las que conozco, son de tipo SQL. En la mayoría de las ocasiones se usa MySQL (este blog la usa), tal vez sencillamente porque es de código abierto y eso se traduce en gratis. Otras soluciones cuestan mucho dinero.

SQL es un lenguaje estructurado para manejar este tipo de bases de datos. Con él se pueden crear tablas, borrarlas, añadir entradas y hacer consultas complejas. Además, y esto ya no sé si es sólo propio de las BBDD SQL, las diferentes tablas pueden relacionarse entre sí. Por esto se les llama “bases de datos relacionales”. Gracias a esta relación se pueden hacer consultas del tipo:

“Muéstrame los alumnos de la clase de Inglés que van con el profesor John”

Toma la tabla de alumnos, toma la tabla de clases, toma la tabla de profesores, cruza relaciones y devuelve la información requerida. Casi que magia.

“Ahora dime cuántos son”

“Ahora me los ordenas por apellido”

Ese es el tipo de cosas que se le pueden pedir a la base de datos.

Las BBDD no-SQL, en cambio, solamente guardan cosas. En mi proyecto, una lista de los gastos. Ahora que lo pienso, también necesito la fecha, y he olvidado implementarla. ¿Lo hace la base de datos automáticamente? Me parece que no.

El caso es que llevo un par de días atascado porque, antes de poder guardar cosas en la base de datos, hay que inicializarla. Se hace con una línea de código, pero, por lo que sea, no funciona. Y es muy frustrante. Multitud de paseos por Stack Overflow no han podido ayudarme.

Ayer, a última hora de la noche, me puse a ver un vídeo sobre usar Hive. Vi que el hombre añadía una línea, algo así como para asegurar que el WidgetBinding estaba inicializado. Tengo una idea peregrina acerca de de qué se puede tratar.

Dado que la base de datos se inicializa antes incluso de que se haga la llamada a la aplicación (primero va Dart y después, encima, va Flutter), hay que asegurarse de que toda la infraestructura necesaria se ha terminado de levantar antes de tener lo necesario para inicializar la base de datos.

Y bueno, si Daniela y Lucas siguen durmiendo, en cuanto publique esto lanzaré el Android Studio y lo probaré. Seguramente se trate de eso.

Gestionar la frustración que provocan estas pequeñas cosas con las que nos atascamos al programar es parte fundamental del proceso. No se trata de aprender a disfrutarlo, pero por lo menos aprender a apreciar que forma parte del proceso de aprendizaje, como creo que fue Manuel quien lo mencionó por aquí.

Comentarios

Deja una respuesta