DataStore kitaplığı, verileri eşzamansız ve tutarlı bir şekilde depolar. Böylece, SharedPreferences'ın dezavantajlarından bazılarını ortadan kaldırabilirsiniz. Bu sayfası, Kotlin Multiplatform (KMP) projelerinde DataStore oluşturmaya odaklanıyor. DataStore hakkında daha fazla bilgi için bkz. DataStore için birincil dokümanlar ve resmi örnekler.
Bağımlılıkları belirleme
DataStore, KMP'yi 1.1.0 ve üzeri sürümlerde destekler.
KMP projenizde DataStore'u kurmak için yapılara bağımlılık ekleyin
modülünüzün build.gradle.kts
dosyasında:
androidx.datastore:datastore
- DataStore kitaplığıandroidx.datastore:datastore-preferences
- Tercihler DataStore kitaplığı
DataStore sınıflarını tanımlama
DataStore
sınıfını ortak içinde DataStoreFactory
ile tanımlayabilirsiniz.
paylaşılan KMP modülünüzün kaynağı. Bu sınıfları ortak kaynaklara yerleştirme
Bu sayede tüm hedef platformlarda paylaşılabilir. Tekliflerinizi otomatikleştirmek ve optimize etmek için
Oluşturulacak actual
ve expect
bildirimleri
bazı en iyi uygulamaları paylaşacağız.
DataStore örneğini oluşturma
Her platformda DataStore nesnesinin nasıl örnekleneceğini tanımlamanız gerekir. Bu, API'nin belirli platformda olması gereken tek bölümüdür kaynak kümelerinde (ör. dosya sistemi API'lerindeki farklılıklardan dolayı) değişiklik gösterir.
Genel
// shared/src/androidMain/kotlin/createDataStore.kt
/**
* Gets the singleton DataStore instance, creating it if necessary.
*/
fun createDataStore(producePath: () -> String): DataStore<Preferences> =
PreferenceDataStoreFactory.createWithPath(
produceFile = { producePath().toPath() }
)
internal const val dataStoreFileName = "dice.preferences_pb"
Android
DataStore
örneğini oluşturmak için, Context
ve
dosya yolu.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
iOS
DataStore örneğini oluşturmak için emin olun.
// shared/src/iosMain/kotlin/createDataStore.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
producePath = {
val documentDirectory: NSURL? = NSFileManager.defaultManager.URLForDirectory(
directory = NSDocumentDirectory,
inDomain = NSUserDomainMask,
appropriateForURL = null,
create = false,
error = null,
)
requireNotNull(documentDirectory).path + "/$dataStoreFileName"
}
)