DataStore (Kotlin Çoklu Platform)

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, 1.1.0 ve üzeri sürümlerde KMP'yi 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 farklı kaynak kümelerinden yararlanır.

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"
    }
)