کتابخانه DataStore دادهها را بهصورت ناهمزمان، یکپارچه، و تراکنشی ذخیره میکند و برخیاز معایب SharedPreferences را برطرف میکند. این صفحه بر ایجاد DataStore در پروژههای Kotlin چندپلاتفرمی (KMP) تمرکز دارد. برای کسب اطلاعات بیشتر درباره DataStore، به اسناد اصلی DataStore و نمونههای رسمی مراجعه کنید.
راهاندازی وابستگیها
برای راهاندازی DataStore در پروژه KMP، وابستگیهای مصنوعات را در فایل build.gradle.kts برای واحدتان اضافه کنید:
commonMain.dependencies {
// DataStore library
implementation("androidx.datastore:datastore-core:1.2.1")
// The Preferences DataStore library
implementation("androidx.datastore:datastore-preferences-core:1.2.1")
}
تعریف کردن کلاسهای 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 = PreferencesSerializer,
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 APIs ارائه دهید:
// shared/src/jvmMain/kotlin/createDataStore.desktop.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
storage = FileStorage(
serializer = PreferencesSerializer,
produceFile = { File(System.getProperty("java.io.tmpdir"), dataStoreFileName) }
)
)