Come salvare nella memoria locale utilizzando Flutter?


96

In Android, se ho le informazioni che voglio persistere nelle sessioni, so che posso usare SharedPreferences o creare un database SQLite o persino scrivere un file sul dispositivo e leggerlo in un secondo momento.

C'è un modo per salvare e ripristinare dati come questo usando Flutter? O dovrei scrivere codice specifico del dispositivo per Android e iOS come nell'esempio dei servizi ?

Risposte:


116

Ci sono alcune opzioni:


Ho scritto un servizio flutter per accedere a SQLite, vedere github.com/ripple182/FlutterSQLiteSample
ripple182

è possibile se utilizzo Room? cosa succede con ios se uso Room?
MNFS

1
Questo sembra funzionare meglio per le preferenze condivise: pub.dev/packages/shared_preferences
Yster


51

Se ti trovi in ​​una situazione in cui vuoi salvare un piccolo valore che vuoi riferire in seguito. quindi dovresti memorizzare i tuoi dati come dati chiave-valore utilizzando shared_preferences

ma se vuoi archiviare dati di grandi dimensioni dovresti andare con SQLITE

tuttavia puoi sempre utilizzare il database Firebase che è disponibile offline

Dato che stiamo parlando di archiviazione locale, puoi sempre leggere e scrivere file sul disco

Altre soluzioni:


come decidere quando usare sqflite o firebase?
stuckedoverflow

1
sqflitelo memorizza solo nel telefono. firebaseviene sincronizzato in un database centrale in cui è possibile eseguire query nel backend. firebaserende anche facile la sincronizzazione tra i dispositivi.
Feu

Tieni presente che il valore predefinito di Firestore di Firebase è 10 MB e può essere impostato su non meno di 1 MB e un massimo di 100 MB. L'accesso offline puro non è consigliato. Se prevedi di utilizzarlo solo come opzione di archiviazione locale e i dati sono grandi, potresti dover riconsiderare. firebase.google.com/docs/reference/android/com/google/firebase/…
Lander

Questa dovrebbe essere la risposta preferita, perché spiega semplicemente dove cercare in diversi scenari.
janpeterka

12

Puoi utilizzare le preferenze condivise dai plugin ufficiali di flutter. https://github.com/flutter/plugins/tree/master/packages/shared_preferences

Utilizza le preferenze condivise per Android, NSUserDefaults per iOS.


1
È l'ideale per database di grandi dimensioni?
temp_

1
@temp_ Non so molto di iOS. Le preferenze condivise su Android, tuttavia, non sono decisamente adatte per database di grandi dimensioni. Vengono scritti come semplici file xml nel file system e letti dal file system se richiesto. Vengono utilizzati principalmente per memorizzare le preferenze delle app e cose simili.
forgemo

Questo sembra funzionare meglio per le preferenze condivise: pub.dev/packages/shared_preferences
Yster

6

Una risposta in ritardo ma spero che possa aiutare chiunque visiti qui anche più tardi? ..

Fornirò le categorie da salvare ei rispettivi metodi migliori ...

  1. Preferenze condivise Usa questo quando memorizzi valori semplici nella memoria, ad esempio il tema del colore, la lingua dell'app, l'ultima posizione di scorrimento (nelle app di lettura) .. queste sono impostazioni semplici che vorresti mantenere al riavvio dell'app .. Puoi, tuttavia, utilizzare questo per memorizzare cose di grandi dimensioni (elenchi, mappe, immagini) ma ciò richiederebbe serializzazione e deserializzazione .. Per saperne di più su questa deserializzazione e serializzazione vai qui .
  2. File Questo aiuta molto quando hai dati che sono definiti più da te per esempio file di registro, file di immagine e forse vuoi esportare file CSV .. Ho sentito che questo tipo di persistenza può essere lavato dai pulitori di archiviazione una volta che il disco si esaurisce spazio .. Non sono sicuro di non averlo mai visto .. Anche questo può memorizzare quasi tutto ma con l'aiuto della serializzazione e deserializzazione ..
  3. Salvataggio in un database Questo è estremamente utile con dati un po 'complessi. E penso che questo non venga lavato dai pulitori del disco poiché è memorizzato in AppData (per Android) .. In questo, i tuoi dati sono memorizzati in un database SQLite. Il suo plugin è SQFLite . I tipi di dati che potresti voler inserire qui sono come tutto ciò che può essere rappresentato da un database.

5

Se devi memorizzare solo valori semplici come token API o dati di accesso (non password!), Ecco cosa ho usato:

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');

Non dimenticare di aggiungere la shared_preferencesdipendenza nel tuo pubspec.yaml (conserva il formato della spaziatura):

dependencies:

  shared_preferences: any


0

Penso che se hai intenzione di memorizzare una grande quantità di dati nella memoria locale puoi usare la libreria sqflite. È molto facile da configurare e l'ho usato personalmente per alcuni progetti di test e funziona bene.

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

Se vuoi archiviare i dati nel cloud puoi usare Firebase. È un servizio solido fornito da Google.

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.