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şturma işlemi ele alınmaktadır. DataStore hakkında daha fazla bilgi için DataStore'un birincil belgelerine ve resmi örneklerine bakın.
Bağımlılıkları ayarlama
DataStore, 1.1.0 ve sonraki sürümlerde KMP'yi destekler.
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:
androidx.datastore:datastore
: DataStore kitaplığıandroidx.datastore:datastore-preferences
: Tercihler DataStore kitaplığı
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/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 dosya yolu ile birlikte bir Context
öğesine ihtiyacınız vardır.
// 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 DataStore yolu ile birlikte bir DataStore fabrikasına ihtiyacınız vardır.
// 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"
}
)