KMP için DataStore'u ayarlama

DataStore kitaplığı, verileri eşzamansız, tutarlı ve işlemsel olarak saklayarak 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'un birincil belgelerini ve resmi örneklerini inceleyin.

Bağımlılıkları ayarlama

KMP projenizde DataStore'u ayarlamak için modülünüzün build.gradle.kts dosyasındaki yapılarla ilgili bağımlılıkları ekleyin:

commonMain.dependencies {
  // DataStore library
  implementation("androidx.datastore:datastore:1.1.7")
  // The Preferences DataStore library
  implementation("androidx.datastore:datastore-preferences:1.1.7")
}

DataStore sınıflarını tanımlayın

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şılmalarını sağlar. Platforma özel uygulamalar oluşturmak için actual ve expect bildirimlerini kullanabilirsiniz.

DataStore örneğini oluşturma

DataStore nesnesinin her platformda nasıl başlatılacağını tanımlamanız gerekir. Dosya sistemi API'lerindeki farklılıklar nedeniyle API'nin yalnızca bu bölümünün belirli platform kaynak kümelerinde olması gerekir.

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 ek olarak Context 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 konumundan 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
    }
)