کتابخانه DataStore دادهها را به صورت غیرهمزمان، مداوم و تراکنشی ذخیره میکند و بر برخی از معایب SharedPreferences غلبه میکند. این صفحه بر ایجاد DataStore در پروژههای Kotlin Multiplatform (KMP) تمرکز دارد. برای اطلاعات بیشتر در مورد DataStore، به مستندات اصلی DataStore و نمونههای رسمی مراجعه کنید.
وابستگیها را تنظیم کنید
برای تنظیم DataStore در پروژه KMP خود، وابستگیهای مربوط به مصنوعات را در فایل build.gradle.kts
مربوط به ماژول خود اضافه کنید:
commonMain.dependencies {
// DataStore library
implementation("androidx.datastore:datastore:1.1.7")
// The Preferences DataStore library
implementation("androidx.datastore:datastore-preferences:1.1.7")
}
کلاسهای DataStore را تعریف کنید
شما میتوانید کلاس DataStore
را با DataStoreFactory
درون منبع مشترک ماژول KMP مشترک خود تعریف کنید. قرار دادن این کلاسها در منابع مشترک به آنها اجازه میدهد تا در تمام پلتفرمهای هدف به اشتراک گذاشته شوند. میتوانید از اعلانهای actual
و expect
برای ایجاد پیادهسازیهای خاص پلتفرم استفاده کنید.
نمونه DataStore را ایجاد کنید
شما باید نحوهی نمونهسازی شیء DataStore را در هر پلتفرم تعریف کنید. این تنها بخشی از API است که به دلیل تفاوت در APIهای سیستم فایل، لازم است در مجموعههای منبع پلتفرم خاص باشد.
رایج
// 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"
اندروید
برای ایجاد نمونه DataStore
در اندروید، به یک Context
به همراه مسیر نیاز دارید.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
آیاواس
در iOS، میتوانید مسیر را از NSDocumentDirectory
بازیابی کنید:
// 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 (دسکتاپ)
برای ایجاد نمونه DataStore
در JVM (دسکتاپ)، با استفاده از APIهای جاوا یا کاتلین، مسیری را ارائه دهید:
// shared/src/jvmMain/kotlin/createDataStore.desktop.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
producePath = {
val file = File(System.getProperty("java.io.tmpdir"), dataStoreFileName)
file.absolutePath
}
)