¿Cómo guardar en el almacenamiento local usando Flutter?

98

En Android, si tengo la información que quiero persistir en las sesiones, sé que puedo usar SharedPreferences o crear una base de datos SQLite o incluso escribir un archivo en el dispositivo y leerlo más tarde.

¿Hay alguna forma de guardar y restaurar datos como este simplemente usando Flutter? ¿O tendría que escribir código específico del dispositivo para Android e iOS como en el ejemplo de servicios ?

Reagankm
fuente

Respuestas:

118

Hay algunas opciones:

Seth Ladd
fuente
Escribí un servicio de flutter para acceder a SQLite, consulte github.com/ripple182/FlutterSQLiteSample
ripple182
¿Es posible si uso Room? ¿Qué pasa con ios si uso Room?
MNFS
1
Esto parece funcionar mejor para las preferencias compartidas: pub.dev/packages/shared_preferences
Yster
Nuevo paquete github.com/lesnitsky/flutter_localstorage
Pablo Díaz
53

Si se encuentra en una situación en la que desea guardar un pequeño valor que desea consultar más adelante. entonces debería almacenar sus datos como datos de valor-clave usando shared_preferences

pero si desea almacenar grandes datos, debe ir con SQLITE

sin embargo, siempre puede usar la base de datos firebase que está disponible sin conexión

Dado que estamos hablando de almacenamiento local, siempre puede leer y escribir archivos en el disco

Otras soluciones:

Raouf Rahiche
fuente
¿Cómo decidir cuándo usar sqflite o firebase?
stuckedoverflow
1
sqflitelo almacena solo en el teléfono. firebasese sincroniza en una base de datos central donde puede realizar consultas en su backend. firebasetambién facilita la sincronización entre dispositivos.
Feu
Tenga en cuenta que Firestore de Firebase tiene un valor predeterminado de 10 MB y se puede configurar en no menos de 1 MB y un máximo de 100 MB. No se recomienda el acceso sin conexión puro. Si planea usar esto solo como una opción de almacenamiento local y los datos son grandes, es posible que deba reconsiderarlo. firebase.google.com/docs/reference/android/com/google/firebase/…
Lander
Esta debería ser la respuesta preferida, porque simplemente explica dónde buscar en diferentes escenarios.
Janpeterka
12

Puedes usar las preferencias compartidas de los complementos oficiales de flutter. https://github.com/flutter/plugins/tree/master/packages/shared_preferences

Utiliza Shared Preferences para Android, NSUserDefaults para iOS.

Furkan Tektas
fuente
1
¿Es esto ideal para grandes bases de datos?
temp_
1
@temp_ No sé mucho sobre iOS. Las preferencias compartidas en Android, sin embargo, definitivamente no son adecuadas para bases de datos grandes. Se escriben como archivos xml sin formato en el sistema de archivos y se leen desde el sistema de archivos si se solicita. Se utilizan principalmente para almacenar preferencias de aplicaciones y cosas similares.
forgemo
Esto parece funcionar mejor para las preferencias compartidas: pub.dev/packages/shared_preferences
Yster
7

Una respuesta tardía, pero espero que también ayude a cualquiera que visite aquí más tarde later ..

Proporcionaré categorías para guardar y sus respectivos mejores métodos ...

  1. Preferencias compartidas Use esto cuando almacene valores simples en el almacenamiento, por ejemplo, tema de color, idioma de la aplicación, última posición de desplazamiento (en aplicaciones de lectura). Estas son configuraciones simples que le gustaría conservar cuando se reinicia la aplicación. Sin embargo, puede usar esta para almacenar cosas grandes (Listas, Mapas, Imágenes) pero eso requeriría serialización y deserialización . Para obtener más información sobre esta deserialización y serialización, vaya aquí .
  2. Archivos Esto ayuda mucho cuando tiene datos que usted define más, por ejemplo, archivos de registro, archivos de imagen y tal vez desee exportar archivos csv. Escuché que este tipo de persistencia se puede lavar con limpiadores de almacenamiento una vez que el disco se agota. space .. No estoy seguro porque nunca lo he visto .. Esto también puede almacenar casi cualquier cosa, pero con la ayuda de serialización y deserialización ..
  3. Guardar en una base de datos Esto es muy útil en datos que son un poco complejos. Y creo que esto no se borra con los limpiadores de discos, ya que se almacena en AppData (para Android). En esto, sus datos se almacenan en una base de datos SQLite. Su complemento es SQFLite . Los tipos de datos que podría querer incluir aquí son como todo lo que puede ser representado por una base de datos.
emanuel sanga
fuente
5

Si necesita almacenar valores simples como token de API o datos de inicio de sesión (¡no contraseñas!), Esto es lo que usé:

import 'package:shared_preferences/shared_preferences.dart';

asyncFunc() async { // Async func to handle Futures easier; or use Future.then
  SharedPreferences prefs = await SharedPreferences.getInstance();
}
...

// Set
prefs.setString('apiToken', token);

// Get
String token = prefs.getString('apiToken');

// Remove
prefs.remove('apiToken');

No olvide agregar shared_preferencesdependencia en su pubspec.yaml (preservar el formato de espaciado):

dependencies:

  shared_preferences: any
Jorge
fuente
0

Creo que si va a almacenar una gran cantidad de datos en el almacenamiento local, puede usar la biblioteca sqflite. Es muy fácil de configurar y lo he usado personalmente para algún proyecto de prueba y funciona bien.

https://github.com/tekartik/sqflite Este es un tutorial: https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57

Si desea almacenar datos en la nube, puede usar firebase. Es un servicio sólido proporcionado por Google.

https://firebase.google.com/docs/flutter/setup

Ishan Fernando
fuente