DataStore लाइब्रेरी, डेटा को सिंक किए बिना, लगातार, और लेन-देन के हिसाब से स्टोर करती है. इससे, SharedPreferences की कुछ समस्याओं को हल किया जा सकता है. इस पेज पर, Kotlin Multiplatform (KMP) प्रोजेक्ट में DataStore बनाने के बारे में बताया गया है. DataStore के बारे में ज़्यादा जानकारी के लिए, DataStore के लिए मुख्य दस्तावेज़ और आधिकारिक सैंपल देखें.
डिपेंडेंसी सेट अप करना
अपने KMP प्रोजेक्ट में DataStore सेट अप करने के लिए, अपने मॉड्यूल की 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 क्लास तय करना
शेयर किए गए KMP मॉड्यूल के कॉमन सोर्स में, DataStore
क्लास को DataStoreFactory
के साथ तय किया जा सकता है. इन क्लास को सामान्य सोर्स में डालने से, इन्हें सभी टारगेट प्लैटफ़ॉर्म पर शेयर किया जा सकता है. प्लैटफ़ॉर्म के हिसाब से लागू करने के लिए, actual
और
expect
एलान का इस्तेमाल किया जा सकता है.
DataStore इंस्टेंस बनाना
आपको हर प्लैटफ़ॉर्म पर DataStore ऑब्जेक्ट को इंस्टैंशिएट करने का तरीका तय करना होगा. फ़ाइल सिस्टम एपीआई में अंतर की वजह से, एपीआई का यह हिस्सा ही किसी खास प्लैटफ़ॉर्म के सोर्स सेट में होना ज़रूरी है.
सामान्य
// 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"
Android
Android पर DataStore
इंस्टेंस बनाने के लिए, आपको पाथ के साथ-साथ Context
की ज़रूरत होगी.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
iOS
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
इंस्टेंस बनाने के लिए, Java या Kotlin एपीआई का इस्तेमाल करके कोई पाथ दें:
// shared/src/jvmMain/kotlin/createDataStore.desktop.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
producePath = {
val file = File(System.getProperty("java.io.tmpdir"), dataStoreFileName)
file.absolutePath
}
)