Wie speichere ich mit Flutter im lokalen Speicher?

96

Wenn ich in Android die Informationen habe, die ich über Sitzungen hinweg beibehalten möchte, kann ich SharedPreferences verwenden oder eine SQLite-Datenbank erstellen oder sogar eine Datei auf das Gerät schreiben und später einlesen.

Gibt es eine Möglichkeit, solche Daten nur mit Flutter zu speichern und wiederherzustellen? Oder muss ich gerätespezifischen Code für Android und iOS wie im Beispiel für Dienste schreiben ?

Reagankm
quelle

Antworten:

116

Es gibt einige Optionen:

Seth Ladd
quelle
Ich habe einen
Flatterdienst geschrieben,
Ist es möglich, wenn ich Room benutze? Was passiert mit ios, wenn ich Room benutze?
MNFS
1
Dies scheint besser für gemeinsam genutzte Einstellungen zu arbeiten: pub.dev/packages/shared_preferences
yster
51

Wenn Sie sich in einer Situation befinden, in der Sie einen kleinen Wert speichern möchten, auf den Sie später verweisen möchten. Dann sollten Sie Ihre Daten mithilfe von shared_preferences als Schlüsselwertdaten speichern

Wenn Sie jedoch große Datenmengen speichern möchten, sollten Sie SQLITE verwenden

Sie können jedoch immer eine Firebase-Datenbank verwenden, die offline verfügbar ist

Da es sich um lokalen Speicher handelt, können Sie jederzeit Dateien auf die Festplatte lesen und schreiben

Andere Lösungen:

Raouf Rahiche
quelle
Wie kann man entscheiden, wann man sqflite oder firebase verwendet?
Stuckedoverflow
1
sqflitespeichert es nur im Telefon. firebasewird in einer zentralen Datenbank synchronisiert, in der Sie Abfragen in Ihrem Backend ausführen können. firebaseerleichtert auch die Synchronisation zwischen Geräten.
Feu
Bitte beachten Sie, dass der Firestore von Firebase standardmäßig 10 MB beträgt und möglicherweise auf mindestens 1 MB und maximal 100 MB eingestellt ist. Ein reiner Offline-Zugriff wird nicht empfohlen. Wenn Sie dies nur als lokale Speicheroption verwenden möchten und die Daten groß sind, müssen Sie dies möglicherweise erneut überdenken. firebase.google.com/docs/reference/android/com/google/firebase/…
Lander
Dies sollte eine bevorzugte Antwort sein, da lediglich erklärt wird, wo in verschiedenen Szenarien gesucht werden muss.
Janpeterka
12

Sie können gemeinsame Einstellungen aus den offiziellen Plugins von flutter verwenden. https://github.com/flutter/plugins/tree/master/packages/shared_preferences

Es verwendet Shared Preferences für Android, NSUserDefaults für iOS.

Furkan Tektas
quelle
1
Ist dies ideal für große Datenbanken?
temp_
1
@temp_ Ich weiß nicht viel über iOS. Gemeinsame Einstellungen unter Android sind jedoch definitiv nicht für große Datenbanken geeignet. Sie werden als einfache XML-Dateien in das Dateisystem geschrieben und auf Anfrage aus dem Dateisystem gelesen. Sie werden hauptsächlich zum Speichern von App-Einstellungen und ähnlichen Dingen verwendet.
Forgemo
Dies scheint besser für gemeinsam genutzte Einstellungen zu arbeiten: pub.dev/packages/shared_preferences
yster
6

Eine späte Antwort, aber ich hoffe, es wird jedem helfen, der später hierher kommt.

Ich werde Kategorien zum Speichern und ihre jeweiligen besten Methoden bereitstellen ...

  1. Gemeinsame Einstellungen Verwenden Sie diese Option, wenn Sie einfache Werte im Speicher speichern, z. B. Farbthema, App-Sprache, letzte Bildlaufposition (beim Lesen von Apps). Dies sind einfache Einstellungen, die Sie beim Neustart der App beibehalten möchten. Sie können diese jedoch verwenden Um große Dinge (Listen, Karten, Bilder) zu speichern , die jedoch eine Serialisierung und Deserialisierung erfordern würden . Weitere Informationen zu dieser Deserialisierung und Serialisierung finden Sie hier .
  2. Dateien Dies ist sehr hilfreich, wenn Sie Daten haben, die mehr von Ihnen definiert wurden, z. B. Protokolldateien, Bilddateien und möglicherweise CSV-Dateien exportieren möchten. Ich habe gehört, dass diese Art der Persistenz von Speicherbereinigern gewaschen werden kann, sobald die Festplatte leer ist Raum .. Bin nicht sicher, wie ich es noch nie gesehen habe .. Dies kann auch fast alles speichern, außer mit Hilfe von Serialisierung und Deserialisierung ..
  3. Speichern in einer Datenbank Dies ist enorm hilfreich bei Daten, die etwas komplex sind. Und ich denke, dies wird nicht von Disc-Reinigern abgewaschen, da es in AppData (für Android) gespeichert ist. Dabei werden Ihre Daten in einer SQLite-Datenbank gespeichert. Das Plugin ist SQFLite . Arten von Daten, die Sie hier eingeben möchten, sind wie alles, was durch eine Datenbank dargestellt werden kann.
emanuel sanga
quelle
5

Wenn Sie nur einfache Werte wie API-Token oder Anmeldedaten (keine Passwörter!) Speichern müssen, habe ich Folgendes verwendet:

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

Vergessen Sie nicht, shared_preferencesAbhängigkeiten in Ihre pubspec.yaml einzufügen (Abstand beibehalten):

dependencies:

  shared_preferences: any
George
quelle
0

Ich denke, wenn Sie große Datenmengen im lokalen Speicher speichern möchten, können Sie die sqflite-Bibliothek verwenden. Es ist sehr einfach einzurichten und ich habe es persönlich für ein Testprojekt verwendet und es funktioniert gut.

https://github.com/tekartik/sqflite Dies ist ein Tutorial - https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57

Wenn Sie Daten in der Cloud speichern möchten, können Sie Firebase verwenden. Es ist ein solider Service von Google.

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

Ishan Fernando
quelle
0

Für eine schöne und saubere JSON-basierte Lösung können Sie auch lokalen Speicher verwenden .

Shabdar
quelle