تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
تخزِّن مكتبة DataStore البيانات بشكل غير متزامن ومتّسق وبطريقة تتعلّق بالمعاملات، ما يحلّ بعض المشاكل في SharedPreferences. تركز
هذه الصفحة على إنشاء DataStore في مشاريع Kotlin Multiplatform (KMP). للحصول على
مزيد من المعلومات عن DataStore، يُرجى الاطّلاع على المستندات الأساسية لواجهة برمجة التطبيقات DataStore
وعيّنات رسمية.
إعداد التبعيات
لإعداد DataStore في مشروع KMP، أضِف التبعيات للعناصر
في ملف build.gradle.kts الخاص بوحدتك:
commonMain.dependencies{// DataStore libraryimplementation("androidx.datastore:datastore:1.1.7")// The Preferences DataStore libraryimplementation("androidx.datastore:datastore-preferences:1.1.7")}
تحديد فئات DataStore
يمكنك تحديد فئة DataStore باستخدام DataStoreFactory داخل مصدر
المشترَك لمكوّن KMP المشترَك. ويسمح وضع هذه الفئات في مصادر مشتركة
بمشاركتها على جميع المنصّات المستهدَفة. يمكنك استخدام بيانَيactual و
expect لإنشاء تنفيذات
خاصة بالنظام الأساسي.
إنشاء مثيل Datastore
عليك تحديد كيفية إنشاء مثيل لكائن DataStore على كل منصة.
هذا هو الجزء الوحيد من واجهة برمجة التطبيقات المطلوب أن يكون في مجموعات ملفّات المصدر الخاصة بالمنصة بسبب الاختلافات في واجهات برمجة تطبيقات نظام الملفات.
الإعدادات الشائعة
// shared/src/commonMain/kotlin/createDataStore.kt/** * Gets the singleton DataStore instance, creating it if necessary. */funcreateDataStore(producePath:()->String):DataStore<Preferences>=PreferenceDataStoreFactory.createWithPath(produceFile={producePath().toPath()})internalconstvaldataStoreFileName="dice.preferences_pb"
Android
لإنشاء مثيل DataStore على Android، تحتاج إلى Context مع
المسار.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# DataStore (Kotlin Multiplatform)\n\nThe DataStore library stores data asynchronously, consistently, and\ntransactionally, overcoming some of the drawbacks of SharedPreferences. This\npage focuses on creating DataStore in Kotlin Multiplatform (KMP) projects. For\nmore information on DataStore, see the [primary documentation for DataStore](/topic/libraries/architecture/datastore)\nand [official samples](https://github.com/android/kotlin-multiplatform-samples).\n| **Note:** Only [DataStore Preferences](/topic/libraries/architecture/datastore#preferences-datastore) is supported in KMP projects.\n\nSet up dependencies\n-------------------\n\n| **Note:** DataStore supports KMP in versions 1.1.0 and higher.\n\nTo set up DataStore in your KMP project, add the dependencies for the artifacts\nin the `build.gradle.kts` file for your module: \n\n commonMain.dependencies {\n // DataStore library\n implementation(\"androidx.datastore:datastore:1.1.7\")\n // The Preferences DataStore library\n implementation(\"androidx.datastore:datastore-preferences:1.1.7\")\n }\n\nDefine the DataStore classes\n----------------------------\n\nYou can define the `DataStore` class with `DataStoreFactory` inside the common\nsource of your shared KMP module. Placing these classes in common sources allows\nthem to be shared across all target platforms. You can use [`actual` and\n`expect` declarations](https://kotlinlang.org/docs/multiplatform-expect-actual.html) to create platform-specific\nimplementations.\n\nCreate the DataStore instance\n-----------------------------\n\nYou need to define how to instantiate the DataStore object on each platform.\nThis is the only part of the API that is required to be in the specific platform\nsource sets due to the differences in file system APIs.\n\n### Common\n\n // shared/src/commonMain/kotlin/createDataStore.kt\n\n /**\n * Gets the singleton DataStore instance, creating it if necessary.\n */\n fun createDataStore(producePath: () -\u003e String): DataStore\u003cPreferences\u003e =\n PreferenceDataStoreFactory.createWithPath(\n produceFile = { producePath().toPath() }\n )\n\n internal const val dataStoreFileName = \"dice.preferences_pb\"\n\n### Android\n\nTo create the `DataStore` instance on Android, you need a [`Context`](/reference/android/content/Context) along\nwith the path. \n\n // shared/src/androidMain/kotlin/createDataStore.android.kt\n\n fun createDataStore(context: Context): DataStore\u003cPreferences\u003e = createDataStore(\n producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }\n )\n\n### iOS\n\nOn iOS, you can retrieve the path from the `NSDocumentDirectory`: \n\n // shared/src/iosMain/kotlin/createDataStore.ios.kt\n\n fun createDataStore(): DataStore\u003cPreferences\u003e = createDataStore(\n producePath = {\n val documentDirectory: NSURL? = NSFileManager.defaultManager.URLForDirectory(\n directory = NSDocumentDirectory,\n inDomain = NSUserDomainMask,\n appropriateForURL = null,\n create = false,\n error = null,\n )\n requireNotNull(documentDirectory).path + \"/$dataStoreFileName\"\n }\n )\n\n### JVM (Desktop)\n\nTo create the `DataStore` instance on JVM (Desktop), provide a path using Java\nor Kotlin APIs: \n\n // shared/src/jvmMain/kotlin/createDataStore.desktop.kt\n\n fun createDataStore(): DataStore\u003cPreferences\u003e = createDataStore(\n producePath = {\n val file = File(System.getProperty(\"java.io.tmpdir\"), dataStoreFileName)\n file.absolutePath\n }\n )\n\n| **Note:** `System.getProperty(\"java.io.tmpdir\")` points to the temporary folder on the system, which might be cleaned upon reboot. On macOS, you can instead use the `~/Library/Application Support/[your-app]` folder."]]