Як зберегти в локальному сховищі за допомогою Flutter?


98

Якщо у мене є інформація, яку я хочу зберігати протягом сесій, я знаю, що я можу використовувати SharedPreferences або створити базу даних SQLite або навіть записати файл на пристрій і прочитати його пізніше.

Чи є спосіб зберегти та відновити такі дані, просто використовуючи Flutter? Або мені потрібно написати спеціальний код пристрою для Android та iOS, як у прикладі служб ?

Відповіді:


118

Є кілька варіантів:


Я написав службу флаттера для доступу до SQLite, див. Github.com/ripple182/FlutterSQLiteSample
ripple182

чи можливо, якщо я користуюся кімнатою? що станеться з ios, якщо я користуюся Room?
MNFS

1
Здається, це працює краще для Спільних
Yster


53

Якщо ви потрапили в ситуацію, коли ви хочете зберегти невелике значення, яке ви хочете використати пізніше. тоді вам слід зберігати ваші дані як дані ключ-значення за допомогою shared_preferences

але якщо ви хочете зберігати великі дані, вам слід скористатися SQLITE

однак ви завжди можете використовувати базу даних firebase, яка доступна в автономному режимі

Оскільки ми говоримо про локальне сховище, ви завжди можете читати та записувати файли на диск

Інші рішення:


як вирішити, коли використовувати sqflite або firebase?
застряг у переливі

1
sqfliteзберігає його лише в телефоні. firebaseсинхронізується в центральній базі даних, де ви можете виконувати запити у вашому серверному сервісі. firebaseтакож полегшує синхронізацію між пристроями.
Feu

Зверніть увагу, що Firestore за замовчуванням Firebase має значення 10 МБ і може мати значення не менше 1 МБ та максимум 100 МБ. Чистий офлайн-доступ не рекомендується. Якщо ви плануєте використовувати це лише як варіант локального зберігання, а дані великі, можливо, вам доведеться переглянути. firebase.google.com/docs/reference/android/com/google/firebase/…
Лендер

Цю відповідь слід віддавати перевагу, оскільки вона просто пояснює, де шукати в різних сценаріях.
janpeterka

12

Ви можете використовувати спільні налаштування з офіційних плагінів Flutter. https://github.com/flutter/plugins/tree/master/packages/shared_preferences

Він використовує Спільні налаштування для Android, NSUserDefaults для iOS.


1
Це ідеально для великих баз даних?
temp_

1
@temp_ Я мало що знаю про iOS. Однак спільні налаштування на Android категорично не підходять для великих баз даних. Вони записуються у файлову систему як звичайні файли xml і за запитом читаються з файлової системи. Вони в основному використовуються для зберігання налаштувань додатків та подібних речей.
forgemo

Здається, це працює краще для Спільних
Yster

7

Пізня відповідь, але я сподіваюся, це також допоможе кожному, хто завітає сюди пізніше😁 ..

Я надам категорії для збереження та відповідні найкращі методи ...

  1. Спільні налаштування Використовуйте це під час зберігання простих значень на сховищі, наприклад кольорової теми, мови програми, останньої позиції прокрутки (у програмах для читання) .. це прості налаштування, які ви хотіли б зберегти при перезапуску програми. Однак ви можете скористатися цим для зберігання великих речей (Списки, Карти, Зображення), але для цього потрібна серіалізація та десериалізація .. Щоб дізнатися більше про цю десеріалізацію та серіалізацію, перейдіть сюди .
  2. Файли Це дуже допомагає, коли у вас є дані, які визначаються вами більше, наприклад файли журналів, файли зображень і, можливо, ви хочете експортувати CSV-файли. простір .. Я не впевнений, бо ніколи цього не бачив .. Тут також можна зберігати майже все, але за допомогою серіалізації та десеріалізації ..
  3. Збереження в базі даних Це надзвичайно корисно для даних, які є трохи складними. І я думаю, що це не змивається очищувачами дисків, оскільки воно зберігається в AppData (для android) .. У цьому ваші дані зберігаються в базі даних SQLite. Його плагін - SQFLite . Види даних, які ви можете сюди ввести, схожі на все, що може бути представлено базою даних.

5

Якщо вам потрібно зберегти лише прості значення, такі як маркер API або дані для входу (не паролі!), Ось що я використав:

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

Не забудьте додати shared_preferencesзалежність у свій pubspec.yaml (зберегти формат інтервалів):

dependencies:

  shared_preferences: any



0

Я думаю, якщо ви збираєтеся зберігати велику кількість даних у локальному сховищі, ви можете використовувати бібліотеку sqflite. Це дуже легко налаштувати, і я особисто використовував якийсь тестовий проект, і він чудово працює.

https://github.com/tekartik/sqflite Цей підручник - https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57

Якщо ви хочете зберігати дані в хмарі, ви можете використовувати Firebase. Це солідний сервіс, який надає Google.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.