کتابخانه DataStore دادهها را بهصورت ناهمگام، سازگار، و تراکنشی ذخیره میکند و بر برخیاز معایب SharedPreferences غلبه میکند. این صفحه بر ایجاد DataStore در پروژههای Kotlin Multiplatform (KMP) تمرکز دارد. برای کسب اطلاعات بیشتر درباره DataStore، به اسناد اصلی DataStore مراجعه کنید.
راهاندازی وابستگیها
برای راهاندازی DataStore در پروژه KMP، وابستگیهای مصنوعات را در فایل build.gradle.kts برای واحدتان اضافه کنید:
commonMain.dependencies {
// DataStore library
implementation("androidx.datastore:datastore-core:1.3.0")
// The Preferences DataStore library
implementation("androidx.datastore:datastore-preferences-core:1.3.0")
}
تعریف کردن کلاسهای DataStore
میتوانید کلاس DataStore را با DataStoreFactory در منبع مشترک
مدول KMP همرسانیشدهتان تعریف کنید. قرار دادن این کلاسها در منابع مشترک امکان
همرسانی آنها را در همه پلاتفرمهای هدف فراهم میکند. میتوانید از اعلانهای actual و
expect برای ایجاد پیادهسازیهای مختص پلاتفرم استفاده کنید.
ایجاد نمونه DataStore
باید نحوه نمونهسازی شیء DataStore را در هر پلاتفرم تعریف کنید. این تنها بخشی از میانای برنامهسازی کاربردی است که بهدلیل تفاوتهای موجود در میاناهای برنامهسازی کاربردی سیستم فایل، باید در مجموعههای منبع پلاتفرم خاص باشد.
متداول
// shared/src/commonMain/kotlin/createDataStore.kt
/**
* Gets the singleton DataStore instance, creating it if necessary.
*/
fun createDataStore(storage: Storage<Preferences>): DataStore<Preferences> =
DataStoreFactory.create(storage = storage)
internal const val dataStoreFileName = "dice.preferences_pb"
Android
برای ایجاد نمونه DataStore در Android، به Context
و مسیر نیاز دارید.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
storage = FileStorage(
serializer = PreferencesFileSerializer,
produceFile = { context.filesDir.resolve(dataStoreFileName) }
)
)
iOS
در iOS، میتوانید مسیر را از NSDocumentDirectory بازیابی کنید:
// shared/src/iosMain/kotlin/createDataStore.ios.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
storage = OkioStorage(
fileSystem = FileSystem.SYSTEM,
serializer = PreferencesSerializer,
producePath = {
val documentDirectory: NSURL? = NSFileManager.defaultManager.URLForDirectory(
directory = NSDocumentDirectory,
inDomain = NSUserDomainMask,
appropriateForURL = null,
create = false,
error = null,
)
(requireNotNull(documentDirectory).path + "/$dataStoreFileName").toPath()
}
)
)
وب
برای ایجاد نمونه DataStore در وب، میتوانید از WebLocalStorage یا
WebSessionStorage استفاده کنید:
// shared/src/jsMain/kotlin/createDataStore.web.kt (also works for wasmJsMain)
fun createDataStore(): DataStore<Preferences> = createDataStore(
storage = WebLocalStorage(
serializer = PreferencesSerializer,
name = dataStoreFileName
)
)
JVM (رایانه)
برای ایجاد نمونه DataStore در JVM (رایانه)، بااستفاده از میاناهای برنامهسازی کاربردی Java یا Kotlin،
مسیری ارائه دهید:
// shared/src/jvmMain/kotlin/createDataStore.desktop.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
storage = FileStorage(
serializer = PreferencesFileSerializer,
produceFile = { File(System.getProperty("java.io.tmpdir"), dataStoreFileName) }
)
)