DataStore kitaplığı, verileri SharedPreferences'in bazı dezavantajlarını ortadan kaldırarak verileri asenkron, tutarlı ve işlemsel olarak depolar. Bu sayfada, Kotlin Multiplatform (KMP) projelerinde DataStore oluşturmaya odaklanılmıştır. Datastore hakkında daha fazla bilgi için Datastore'un birincil belgelerine ve resmi örneklerine bakın.
Bağımlılıkları ayarlama
KMP projenizde DataStore'u ayarlamak için modülünüzün build.gradle.kts
dosyasına yapıların bağımlılıklarını ekleyin:
commonMain.dependencies {
// DataStore library
implementation("androidx.datastore:datastore:1.1.7")
// The Preferences DataStore library
implementation("androidx.datastore:datastore-preferences:1.1.7")
}
Veri deposu sınıflarını tanımlama
Paylaşılan KMP modülünüzün ortak kaynağında DataStore
sınıfını DataStoreFactory
ile tanımlayabilirsiniz. Bu sınıfları ortak kaynaklara yerleştirmek, tüm hedef platformlarda paylaşılmasına olanak tanır. Platforma özel uygulamalar oluşturmak için actual
ve expect
bildirimlerini kullanabilirsiniz.
DataStore örneğini oluşturma
DataStore nesnesinin her platformda nasıl oluşturulacağını tanımlamanız gerekir. Dosya sistemi API'lerindeki farklılıklar nedeniyle API'nin, belirli platform kaynak kümelerinde bulunması gereken tek parçası budur.
Genel
// shared/src/commonMain/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
Android'de DataStore
örneğini oluşturmak için yola Context
eklemeniz gerekir.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
iOS
iOS'te yolu NSDocumentDirectory
'den alabilirsiniz:
// shared/src/iosMain/kotlin/createDataStore.ios.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"
}
)
JVM (Masaüstü)
JVM'de (masaüstü) DataStore
örneğini oluşturmak için Java veya Kotlin API'lerini kullanarak bir yol sağlayın:
// shared/src/jvmMain/kotlin/createDataStore.desktop.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
producePath = {
val file = File(System.getProperty("java.io.tmpdir"), dataStoreFileName)
file.absolutePath
}
)