Flutter kullanarak yerel depolamaya nasıl kaydedilir?


105

Android'de, oturumlarda kalmasını istediğim bilgilere sahipsem, SharedPreferences'ı kullanabileceğimi veya bir SQLite veritabanı oluşturabileceğimi veya hatta cihaza bir dosya yazıp daha sonra okuyabileceğimi biliyorum.

Sadece Flutter kullanarak böyle verileri kaydetmenin ve geri yüklemenin bir yolu var mı? Veya hizmetler örneğindeki gibi Android ve iOS için cihaza özel kod yazmam gerekir mi?

Yanıtlar:


122

Birkaç seçenek var:



Oda kullanırsam mümkün mü? Room kullanırsam iOS'a ne olur?
MNFS

1
Bu, Paylaşılan Tercihler için daha iyi çalışıyor gibi görünüyor: pub.dev/packages/shared_preferences
Yster


55

Daha sonra değinmek istediğiniz küçük bir değeri kaydetmek istediğiniz bir durumdaysanız. daha sonra, verilerinizi shared_preferences kullanarak anahtar-değer verileri olarak depolamalısınız

ancak büyük verileri depolamak istiyorsanız SQLITE ile gitmelisiniz

ancak her zaman çevrimdışı kullanılabilen firebase veritabanını kullanabilirsiniz

Yerel depolamadan bahsettiğimiz için dosyaları her zaman diske okuyabilir ve yazabilirsiniz.

Diğer çözümler:


ne zaman sqflite veya firebase kullanılacağına nasıl karar verilir?
sıkışmışoverflow

1
sqfliteyalnızca telefonda saklar. firebasearka ucunuzda sorgular gerçekleştirebileceğiniz merkezi bir veritabanında senkronize edilir. firebaseayrıca cihazlar arasında kolay senkronizasyon sağlar.
Feu

Firebase'in Firestore'unun varsayılan olarak 10MB olduğunu ve en az 1MB ve maksimum 100MB olarak ayarlanabileceğini lütfen unutmayın. Saf çevrimdışı erişim tavsiye edilmez. Bunu yalnızca yerel bir depolama seçeneği olarak kullanmayı planlıyorsanız ve veriler büyükse, yeniden düşünmeniz gerekebilir. firebase.google.com/docs/reference/android/com/google/firebase/…
Lander

Bu tercih edilen cevap olmalıdır, çünkü basitçe farklı senaryolarda nereye bakılacağını açıklamaktadır.
janpeterka

12

Flutter'ın resmi eklentilerinden paylaşılan tercihleri kullanabilirsiniz . https://github.com/flutter/plugins/tree/master/packages/shared_preferences

Android için Paylaşılan Tercihler, iOS için NSUserDefaults kullanır.


1
Bu, büyük veritabanları için ideal mi?
temp_

1
@temp_ iOS hakkında pek bir şey bilmiyorum. Ancak Android'de Paylaşılan Tercihler, büyük veri tabanları için kesinlikle uygun değildir. Dosya sistemine düz xml dosyaları olarak yazılır ve istenirse dosya sisteminden okunur. Esas olarak uygulama tercihlerini ve benzer şeyleri depolamak için kullanılırlar.
forgemo

Bu, Paylaşılan Tercihler için daha iyi çalışıyor gibi görünüyor: pub.dev/packages/shared_preferences
Yster

10

API simgesi veya oturum açma verileri (parolalar değil!) Gibi yalnızca basit değerleri depolamanız gerekiyorsa, işte kullandım:

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_preferencesPubspec.yaml dosyanıza bağımlılık eklemeyi unutmayın (aralık biçimini koruyun):

dependencies:

  shared_preferences: any

8

Geç bir cevap ama umarım burayı daha sonra ziyaret edenlere de yardımcı olur😁 ..

Kaydedilecek kategorileri ve en iyi yöntemlerini sunacağım ...

  1. Paylaşılan Tercihler Bunu, örneğin Renk teması, uygulama dili, son kaydırma konumu (okuma uygulamalarında) gibi basit değerleri depoda saklarken kullanın .. bunlar, uygulama yeniden başladığında devam etmek isteyeceğiniz basit ayarlardır. Ancak, bunu kullanabilirsiniz. büyük şeyleri (Listeler, Haritalar, Görüntüler) depolamak için, ancak bu serileştirme ve serileştirmeyi kaldırmayı gerektirir .. Bu serileştirme ve serileştirme hakkında daha fazla bilgi edinmek için buraya gidin .
  2. Dosyalar Bu, sizin tarafınızdan daha fazla tanımlanan verilere sahip olduğunuzda, örneğin günlük dosyaları, görüntü dosyaları ve belki de csv dosyalarını dışa aktarmak istediğinizde çok yardımcı olur .. Bu tür kalıcılığın, disk bittiğinde depolama temizleyicileri tarafından yıkanabileceğini duydum. boşluk .. Hiç görmediğim kadar emin değilim .. Bu da hemen hemen her şeyi saklayabilir, ancak serileştirme ve serileştirmeden çıkarma yardımıyla ..
  3. Veritabanına kaydetme Bu, biraz karmaşık olan veriler için son derece yararlıdır. Ve bunun AppData'da (android için) depolandığı için disk temizleyicileri tarafından silinmediğini düşünüyorum .. Bunda , verileriniz bir SQLite veritabanında saklanır. Eklentisi SQFLite'dır . Buraya koymak isteyebileceğiniz veri türleri, bir veritabanı ile temsil edilebilen her şey gibidir.


1

Yerel depolamayı kullanabilirsiniz

1- Bağımlılık ekle pubspec.yaml( Sürümü son sürüme göre değiştir )

dependencies:
  ...
  localstorage: ^3.0.0

2- Ardından aşağıdaki komutu çalıştırın

flutter packages get

3- yerel depolamayı içe aktarın:

import 'package:localstorage/localstorage.dart';

4- Bir örnek oluşturun

class MainApp extends StatelessWidget {
  final LocalStorage storage = new LocalStorage('localstorage_app');
  ...
}

Ekle lcoalstorage öğeyi:

void addItemsToLocalStorage() {
  storage.setItem('name', 'Abolfazl');
  storage.setItem('family', 'Roshanzamir');

  final info = json.encode({'name': 'Darush', 'family': 'Roshanzami'});
  storage.setItem('info', info);
}

Lcoalstorage'dan bir öğe alın :

void getitemFromLocalStorage() {
  final name = storage.getItem('name'); // Abolfazl
  final family = storage.getItem('family'); // Roshanzamir
  
  Map<String, dynamic> info = json.decode(storage.getItem('info'));
  final info_name=info['name'];
  final info_family=info['family'];
}

Sil localStorage bir öğe:

void removeItemFromLocalStorage() {
  storage.deleteItem('name');
  storage.deleteItem('family');
  storage.deleteItem('info');
}

0

Yerel depolamada büyük miktarda veri depolayacaksanız sqflite kitaplığını kullanabilirsiniz. Kurulumu çok kolay ve şahsen bazı test projeleri için kullandım ve iyi çalışıyor.

https://github.com/tekartik/sqflite Bu bir öğretici - https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57

Verileri bulutta depolamak istiyorsanız firebase'i kullanabilirsiniz. Google tarafından sağlanan sağlam bir hizmettir.

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



0

Aynı, basit yerel depolamayı ve aynı zamanda makul bir güvenlik düzeyini arıyordum. Bulduğum en mantıklı iki çözüm , küçük şeyler için flutter_secure_storage ( Raouf tarafından belirtildiği gibi ) ve daha büyük veri kümeleri için kovan .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.