Comment enregistrer sur le stockage local en utilisant Flutter?


98

Sous Android, si je dispose des informations que je souhaite conserver dans les sessions, je sais que je peux utiliser SharedPreferences ou créer une base de données SQLite ou même écrire un fichier sur l'appareil et le lire plus tard.

Existe-t-il un moyen de sauvegarder et de restaurer des données comme celle-ci en utilisant simplement Flutter? Ou aurais-je besoin d'écrire un code spécifique à l'appareil pour Android et iOS, comme dans l' exemple des services ?

Réponses:


118

Il existe quelques options:


J'ai écrit un service de flutter pour accéder à SQLite, voir github.com/ripple182/FlutterSQLiteSample
ripple182

est-ce possible si j'utilise Room? que se passe-t-il avec iOS si j'utilise Room?
MNFS

1
Cela semble mieux fonctionner pour les préférences partagées: pub.dev/packages/shared_preferences
Yster


53

Si vous êtes dans une situation où vous souhaitez enregistrer une petite valeur que vous souhaitez consulter plus tard. alors vous devez stocker vos données en tant que données clé-valeur à l'aide de shared_preferences

mais si vous souhaitez stocker des données volumineuses, vous devez utiliser SQLITE

cependant vous pouvez toujours utiliser la base de données Firebase qui est disponible hors ligne

Puisque nous parlons de stockage local, vous pouvez toujours lire et écrire des fichiers sur le disque

Autres solutions:


comment décider quand utiliser sqflite ou firebase?
stuckedoverflow

1
sqflitele stocke uniquement dans le téléphone. firebaseest synchronisé dans une base de données centrale où vous pouvez effectuer des requêtes dans votre backend. firebasefacilite également la synchronisation entre les appareils.
Feu

Veuillez noter que Firestore de Firebase est défini par défaut sur 10 Mo et peut être défini sur au moins 1 Mo et un maximum de 100 Mo. Un accès hors ligne pur n'est pas recommandé. Si vous prévoyez de l'utiliser uniquement comme option de stockage local et que les données sont volumineuses, vous devrez peut-être reconsidérer. firebase.google.com/docs/reference/android/com/google/firebase/…
Lander

Cela devrait être la réponse préférée, car elle explique simplement où chercher dans différents scénarios.
janpeterka

12

Vous pouvez utiliser les préférences partagées des plugins officiels de Flutter. https://github.com/flutter/plugins/tree/master/packages/shared_preferences

Il utilise les préférences partagées pour Android, NSUserDefaults pour iOS.


1
Est-ce idéal pour les grandes bases de données?
temp_

1
@temp_ Je ne connais pas grand chose à iOS. Cependant, les préférences partagées sur Android ne sont définitivement pas adaptées aux grandes bases de données. Ils sont écrits sous forme de fichiers XML simples dans le système de fichiers et lus à partir du système de fichiers si nécessaire. Ils sont principalement utilisés pour stocker les préférences des applications et des choses similaires.
Forgemo

Cela semble mieux fonctionner pour les préférences partagées: pub.dev/packages/shared_preferences
Yster

7

Une réponse tardive mais j'espère que cela aidera tous ceux qui viendront ici plus tard aussi ...

Je vais fournir des catégories à sauvegarder et leurs meilleures méthodes respectives ...

  1. Préférences partagées Utilisez cette option lors du stockage de valeurs simples sur le stockage, par exemple le thème de couleur, la langue de l'application, la dernière position de défilement (dans les applications de lecture). Ce sont des paramètres simples que vous voudriez conserver lorsque l'application redémarre. Vous pouvez cependant utiliser ceci pour stocker de grandes choses (listes, cartes, images) mais cela nécessiterait une sérialisation et une désérialisation . Pour en savoir plus sur cette désérialisation et sérialisation, allez ici .
  2. Fichiers Cela aide beaucoup lorsque vous avez des données que vous définissez davantage, par exemple des fichiers journaux, des fichiers image et peut-être que vous souhaitez exporter des fichiers csv .. J'ai entendu dire que ce type de persistance peut être nettoyé par les nettoyeurs de stockage une fois que le disque est à court de espace .. Je ne suis pas sûr car je ne l'ai jamais vu .. Cela peut aussi stocker presque tout sauf avec l'aide de la sérialisation et de la désérialisation ..
  3. Enregistrement dans une base de données Ceci est extrêmement utile dans les données un peu complexes. Et je pense que cela n'est pas lavé par les nettoyeurs de disque car il est stocké dans AppData (pour Android) .. En cela, vos données sont stockées dans une base de données SQLite. Son plugin est SQFLite . Les types de données que vous pourriez vouloir mettre ici sont comme tout ce qui peut être représenté par une base de données.

5

Si vous avez besoin de stocker uniquement des valeurs simples comme un jeton API ou des données de connexion (pas des mots de passe!), Voici ce que j'ai utilisé:

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

N'oubliez pas d'ajouter une shared_preferencesdépendance dans votre pubspec.yaml (conserver le format d'espacement):

dependencies:

  shared_preferences: any



0

Je pense que si vous allez stocker une grande quantité de données dans le stockage local, vous pouvez utiliser la bibliothèque sqflite. Il est très facile à installer et je l'ai personnellement utilisé pour un projet de test et cela fonctionne très bien.

https://github.com/tekartik/sqflite Ceci est un tutoriel - https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57

Si vous souhaitez stocker des données dans le cloud, vous pouvez utiliser Firebase. C'est un service solide fourni par Google.

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.