Bagaimana cara menyimpan ke penyimpanan lokal menggunakan Flutter?

98

Di Android, jika saya memiliki informasi yang ingin saya pertahankan di seluruh sesi, saya tahu saya dapat menggunakan SharedPreferences atau membuat database SQLite atau bahkan menulis file ke perangkat dan membacanya nanti.

Apakah ada cara untuk menyimpan dan memulihkan data seperti ini hanya dengan menggunakan Flutter? Atau apakah saya perlu menulis kode khusus perangkat untuk Android dan iOS seperti dalam contoh layanan ?

Reagankm
sumber

Jawaban:

118

Ada beberapa pilihan:

Seth Ladd
sumber
Saya menulis layanan flutter untuk mengakses SQLite, lihat github.com/ripple182/FlutterSQLiteSample
ripple182
apakah mungkin jika saya menggunakan Room? Apa yang terjadi dengan iOS jika saya menggunakan Room?
MNFS
1
Ini tampaknya bekerja lebih baik untuk Preferensi Bersama: pub.dev/packages/shared_preferences
Yster
53

Jika Anda berada dalam situasi di mana Anda ingin menyimpan sedikit nilai yang ingin Anda rujuk nanti. maka Anda harus menyimpan data Anda sebagai data nilai kunci menggunakan shared_preferences

tetapi jika Anda ingin menyimpan data besar, Anda harus menggunakan SQLITE

namun Anda selalu dapat menggunakan database firebase yang tersedia secara offline

Karena kita berbicara tentang penyimpanan lokal, Anda selalu dapat membaca dan menulis file ke disk

Solusi lain:

Raouf Rahiche
sumber
bagaimana memutuskan kapan menggunakan sqflite atau firebase?
stuckedoverflow
1
sqflitemenyimpannya hanya di telepon. firebasedisinkronkan di database pusat tempat Anda dapat melakukan kueri di backend Anda. firebasejuga memudahkan sinkronisasi antar perangkat.
Feu
Harap diperhatikan bahwa Firebase Firestore secara default adalah 10MB dan dapat disetel tidak kurang dari 1MB dan maksimum 100MB. Akses offline murni tidak disarankan. Jika Anda berencana untuk menggunakan ini sebagai opsi penyimpanan lokal saja dan datanya besar, Anda mungkin perlu mempertimbangkannya kembali. firebase.google.com/docs/reference/android/com/google/firebase/…
Lander
Ini harus menjadi jawaban yang disukai, karena ini hanya menjelaskan di mana mencarinya dalam skenario yang berbeda.
janpeterka
12

Anda dapat menggunakan preferensi bersama dari plugin resmi flutter. https://github.com/flutter/plugins/tree/master/packages/shared_preferences

Ini menggunakan Preferensi Bersama untuk Android, NSUserDefaults untuk iOS.

Furkan Tektas
sumber
1
Apakah ini ideal untuk database besar?
temp_
1
@temp_ Saya tidak tahu banyak tentang iOS. Preferensi Bersama di Android, bagaimanapun, secara definitif tidak cocok untuk database besar. Mereka ditulis sebagai file xml biasa ke sistem file, dan dibaca dari sistem file jika diminta. Mereka terutama digunakan untuk menyimpan preferensi aplikasi dan hal-hal serupa.
Forgemo
Ini tampaknya bekerja lebih baik untuk Preferensi Bersama: pub.dev/packages/shared_preferences
Yster
7

Jawaban yang terlambat tapi saya harap ini akan membantu siapa pun yang berkunjung ke sini nanti juga😁 ..

Saya akan memberikan kategori untuk disimpan dan metode terbaik masing-masing ...

  1. Preferensi Bersama Gunakan ini saat menyimpan nilai sederhana pada penyimpanan misalnya Tema warna, bahasa aplikasi, posisi gulir terakhir (dalam membaca aplikasi) .. ini adalah pengaturan sederhana yang ingin Anda pertahankan saat aplikasi dimulai ulang .. Namun, Anda dapat menggunakan ini untuk menyimpan hal-hal besar (Daftar, Peta, Gambar) tetapi itu akan membutuhkan serialisasi dan deserialisasi .. Untuk mempelajari lebih lanjut tentang deserialisasi dan serialisasi, buka di sini .
  2. File Ini sangat membantu ketika Anda memiliki data yang lebih ditentukan oleh Anda misalnya file log, file gambar dan mungkin Anda ingin mengekspor file csv .. Saya mendengar bahwa jenis persistensi ini dapat dicuci oleh pembersih penyimpanan setelah disk habis ruang .. Saya tidak yakin karena saya belum pernah melihatnya .. Ini juga dapat menyimpan hampir semua hal kecuali dengan bantuan serialisasi dan deserialisasi ..
  3. Menyimpan ke database Ini sangat membantu dalam data yang agak rumit. Dan saya pikir ini tidak terhapus oleh pembersih disk karena disimpan di AppData (untuk android) .. Dalam hal ini, data Anda disimpan dalam database SQLite. Pluginnya adalah SQFLite . Jenis data yang mungkin ingin Anda masukkan di sini seperti segala sesuatu yang dapat direpresentasikan oleh database.
emanuel sanga
sumber
5

Jika Anda hanya perlu menyimpan nilai sederhana seperti token API atau data login (bukan kata sandi!), Inilah yang saya gunakan:

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

Jangan lupa untuk menambahkan shared_preferencesketergantungan di pubspec.yaml Anda (pertahankan format spasi):

dependencies:

  shared_preferences: any
George
sumber
1

Untuk solusi berbasis JSON yang bagus dan bersih, Anda juga dapat menggunakan penyimpanan lokal .

shabdar
sumber
0

Saya pikir Jika Anda akan menyimpan data dalam jumlah besar di penyimpanan lokal, Anda dapat menggunakan pustaka sqflite. Ini sangat mudah untuk diatur dan saya pribadi telah menggunakan untuk beberapa proyek pengujian dan bekerja dengan baik.

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

Jika Anda ingin menyimpan data di cloud, Anda dapat menggunakan firebase. Ini adalah layanan solid yang disediakan oleh google.

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

Ishan Fernando
sumber