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