DataStore (Kotlin Çoklu Platform)

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