Library DataStore menyimpan data secara asinkron, konsisten, dan transaksional, yang mengatasi beberapa kelemahan SharedPreferences. Halaman ini berfokus pada pembuatan DataStore di project Multiplatform (KMP) Kotlin. Untuk informasi selengkapnya tentang DataStore, lihat dokumentasi utama untuk DataStore dan contoh resmi.
Menyiapkan dependensi
DataStore mendukung KMP di versi 1.1.0 dan yang lebih baru.
Untuk menyiapkan DataStore dalam project KMP, tambahkan dependensi untuk artefak
dalam file build.gradle.kts
untuk modul Anda:
androidx.datastore:datastore
- Library DataStoreandroidx.datastore:datastore-preferences
- Library Preferences DataStore
Menentukan class DataStore
Anda dapat menentukan class DataStore
dengan DataStoreFactory
di dalam sumber
umum modul KMP bersama. Menempatkan class ini di sumber umum memungkinkan class tersebut dibagikan di semua platform target. Anda dapat menggunakan
deklarasi actual
dan expect
untuk membuat
implementasi khusus platform.
Membuat instance DataStore
Anda perlu menentukan cara membuat instance objek DataStore di setiap platform. Ini adalah satu-satunya bagian dari API yang harus ada di set sumber platform tertentu karena perbedaan dalam API sistem file.
Umum
// 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
Untuk membuat instance DataStore
, Anda memerlukan Context
beserta jalur file.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
iOS
Untuk membuat instance DataStore, Anda memerlukan factory database beserta jalur database.
// 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"
}
)