Flutter

Flutter y SQLite multiplataforma

En este post te enseñaré a usar Flutter con SQLite en varias plataformas, excepto la web. El paquete oficial soporta solo Android, iOS y MacOS, pero no Windows ni Linux.

Aquí veremos cómo usar SQLite con Flutter en Android, iOS, MacOS, Windows y Linux usando un paquete adicional llamado sqflite_ffi que es compatible con Linux y Windows.

Nota: si tú solo quieres usar SQLite en Android, iOS o MacOS entonces tal vez quieras buscar un tutorial más simple como este, ya que aquí enseño a cómo tener SQLite en la mayor cantidad de plataformas posibles.

Agregando dependencias

Primero puse las dependencias sqlite y path en dependencies:

See the gist on github.

Siguiendo las instrucciones de sqflite_ffi https://github.com/tekartik/sqflite/blob/master/sqflite_common_ffi/doc/using_ffi_instead_of_sqflite.md agregué sqflite_common_ffi a las dev_dependencies:

See the gist on github.

Por el momento no sé cuál es la diferencia entre las dev_dependencies y dependencies específicamente en Flutter, ya que al mover sqflite_common_ffi me dio algunos problemas en Windows y lo dejé en dev_dependencies.

Ejemplo

Yo te mostraré un ejemplo muy sucio y poco optimizado, pero que te mostrará cómo trabajar con SQLite en varias plataformas con Flutter.

Estoy importando las siguientes librerías:

See the gist on github.

Y en la función que obtiene la base de datos estoy comprobando si estoy en Windows o Linux para invocar a sqfliteFfiInit(); además de invocar a openDatabase según la plataforma.

Fíjate en que al final obtendremos una variable de tipo Database, así que más adelante podríamos tener una función que obtiene la base de datos sin importar plataforma:

See the gist on github.

Te repito que es un ejemplo muy sucio, modificado de otros ejemplos y todo eso. Lo que quiero que notes es que estamos comprobando en cuál plataforma estamos y además obteniendo la ruta de las bases de datos.

En Windows y Linux no existirá getDatabasesPath así que simplemente utilizo el directorio actual, pero como en iOS y Android sí existe entonces debo invocar a esa función.

Obviamente falta optimizar, poner constantes y todo eso. Para probar usé el siguiente código que de nuevo es copiado de por ahí:

See the gist on github.

En este caso estoy creando la tabla (cosa que debería ser en el onCreate, pero te repito que es un ejemplo), insertando, obteniendo e imprimiendo resultados de la consulta.

Código completo

Te mostraré mi main.dart que tiene la función que prueba a SQLite y además una función que se invoca al presionar el botón y que muestra los resultados de la consulta en un SnackBar:

See the gist on github.

Fíjate a partir de la línea 152.

Compilando para producción

Para probar que todo funcione, yo compilé para Windows y para Android. En Android no tuve ningún problema y todo funcionó perfectamente:

SQLite 3 con Flutter en Android – Multiplataforma

En Windows primero no funcionaba pero es porque hay que colocar y distribuir el DLL de SQLite junto con el ejecutable.

Lo descargué de https://www.sqlite.org/download.html, el zip sqlite-dll-win64-x64-3390300.zip y extrajo sqlite3.dll. Obviamente en el futuro aparecerán actualizaciones.

Flutter con SQLite3 en Windows

Lo único en lo que me quedan dudas es en la versión, no sé cuál versión utiliza el paquete, pero me imagino que basta con tener la última versión.

Nota: el archivo SQLite se crea dentro de .dart_tool\sqflite_common_ffi\databases.

Poniendo todo junto

Te dejo los programas de prueba (Android y Windows) en el repositorio de GitHub junto con el código completo para que puedas probar y descargar las demostraciones.

Para terminar te dejo con más tutoriales de Flutter en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Imprimir PDF con Bot de Telegram

La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…

23 horas hace

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

2 días hace

PHP: incrustar imagen en base64

El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…

2 días hace

Plugin ESC POS – Actualización 3.4.0: imprimir HTML

El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…

3 días hace

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

1 semana hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

1 semana hace

Esta web usa cookies.