DataStore kitaplığı, verileri eşzamansız, tutarlı ve işlemsel olarak depolayarak SharedPreferences'ın bazı dezavantajlarını ortadan kaldırır. Bu sayfada, Kotlin Multiplatform (KMP) projelerinde DataStore oluşturma konusu ele alınmaktadır. DataStore hakkında daha fazla bilgi için DataStore ile ilgili birincil belgelere bakın.
Bağımlılıkları ayarlama
KMP projenizde DataStore'u ayarlamak için modülünüzün build.gradle.kts dosyasındaki yapıların bağımlılıklarını ekleyin:
commonMain.dependencies {
// DataStore library
implementation("androidx.datastore:datastore-core:1.3.0")
// The Preferences DataStore library
implementation("androidx.datastore:datastore-preferences-core:1.3.0")
}
DataStore sınıflarını tanımlama
DataStore sınıfını, paylaşılan KMP modülünüzün ortak kaynağında DataStoreFactory ile tanımlayabilirsiniz. Bu sınıfları ortak kaynaklara yerleştirmek, tüm hedef platformlarda paylaşılmalarına olanak tanır. Platforma özel uygulamalar oluşturmak için actual ve expect bildirimlerini kullanabilirsiniz.
DataStore örneğini oluşturma
Her platformda DataStore nesnesinin nasıl örneklendirileceğini tanımlamanız gerekir. Dosya sistemi API'lerindeki farklılıklar nedeniyle API'nin belirli platform kaynak gruplarında bulunması gereken tek bölümü budur.
Yaygın
// shared/src/commonMain/kotlin/createDataStore.kt
/**
* Gets the singleton DataStore instance, creating it if necessary.
*/
fun createDataStore(storage: Storage<Preferences>): DataStore<Preferences> =
DataStoreFactory.create(storage = storage)
internal const val dataStoreFileName = "dice.preferences_pb"
Android
Android'de DataStore örneğini oluşturmak için yolun yanı sıra Context gerekir.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
storage = FileStorage(
serializer = PreferencesFileSerializer,
produceFile = { context.filesDir.resolve(dataStoreFileName) }
)
)
iOS
iOS'te yolu NSDocumentDirectory üzerinden alabilirsiniz:
// shared/src/iosMain/kotlin/createDataStore.ios.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
storage = OkioStorage(
fileSystem = FileSystem.SYSTEM,
serializer = PreferencesSerializer,
producePath = {
val documentDirectory: NSURL? = NSFileManager.defaultManager.URLForDirectory(
directory = NSDocumentDirectory,
inDomain = NSUserDomainMask,
appropriateForURL = null,
create = false,
error = null,
)
(requireNotNull(documentDirectory).path + "/$dataStoreFileName").toPath()
}
)
)
Web
Web'de DataStore örneğini oluşturmak için WebLocalStorage veya WebSessionStorage kullanabilirsiniz:
// shared/src/jsMain/kotlin/createDataStore.web.kt (also works for wasmJsMain)
fun createDataStore(): DataStore<Preferences> = createDataStore(
storage = WebLocalStorage(
serializer = PreferencesSerializer,
name = 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(
storage = FileStorage(
serializer = PreferencesFileSerializer,
produceFile = { File(System.getProperty("java.io.tmpdir"), dataStoreFileName) }
)
)