DataStore (Kotlin Çoklu Platform)

DataStore kitaplığı, verileri eşzamansız, tutarlı ve işlemsel olarak depolayarak SharedPreferences'ın bazı dezavantajlarının da üstesinden gelir. Bu sayfa, Kotlin Multiplatform (KMP) projelerinde DataStore oluşturmaya odaklanmaktadır. DataStore hakkında daha fazla bilgi edinmek için DataStore için birincil belgelere ve resmi örneklere bakın.

Bağımlılıkları ayarlama

DataStore, KMP'yi 1.1.0 ve sonraki sürümlerde destekler.

KMP projenizde DataStore'u kurmak 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ığı

DataStore sınıflarını tanımlama

Paylaşılan KMP modülünüzün ortak kaynağında DataStoreFactory ile DataStore sınıfını tanımlayabilirsiniz. Bu sınıfların ortak kaynaklara yerleştirilmesi, tüm hedef platformlarda paylaşılmasına olanak tanır. Platforma özel uygulamalar oluşturmak için actual ve expect bildirimlerini kullanabilirsiniz.

DataStore örneği oluşturma

DataStore nesnesinin her platformda nasıl örnekleneceğini tanımlamanız gerekir. Bu, dosya sistemi API'lerindeki farklılıklar nedeniyle belirli platform kaynağı kümelerinde bulunması gereken API'nin tek parçasıdı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 dosya yolu ile birlikte bir Context oluşturmanız gerekir.

// 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 veritabanı yoluyla birlikte bir veritabanı 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"
    }
)