DataStore (Kotlin मल्टीप्लैटफ़ॉर्म)

DataStore लाइब्रेरी, डेटा को असिंक्रोनस तरीके से, लगातार, और लेन-देन के हिसाब से स्टोर करती है. इससे, SharedPreferences की कुछ समस्याओं को हल किया जा सकता है. इस पेज पर, Kotlin Multiplatform (KMP) प्रोजेक्ट में DataStore बनाने के बारे में बताया गया है. DataStore के बारे में ज़्यादा जानने के लिए, DataStore के लिए मुख्य दस्तावेज़ और आधिकारिक सैंपल देखें.

डिपेंडेंसी सेट अप करना

DataStore, 1.1.0 और इसके बाद के वर्शन में KMP के साथ काम करता है.

अपने KMP प्रोजेक्ट में DataStore सेट अप करने के लिए, अपने मॉड्यूल की build.gradle.kts फ़ाइल में आर्टफ़ैक्ट के लिए डिपेंडेंसी जोड़ें:

  • androidx.datastore:datastore - DataStore लाइब्रेरी
  • androidx.datastore:datastore-preferences - Preferences DataStore लाइब्रेरी

DataStore क्लास तय करना

शेयर किए गए KMP मॉड्यूल के कॉमन सोर्स में, DataStore क्लास को DataStoreFactory के साथ तय किया जा सकता है. इन क्लास को सामान्य सोर्स में डालने पर, उन्हें टारगेट किए गए सभी प्लैटफ़ॉर्म पर शेयर किया जा सकता है. प्लैटफ़ॉर्म के हिसाब से लागू करने के लिए, actual और expect एलान का इस्तेमाल किया जा सकता है.

DataStore इंस्टेंस बनाना

आपको हर प्लैटफ़ॉर्म पर DataStore ऑब्जेक्ट को इंस्टैंशिएट करने का तरीका तय करना होगा. फ़ाइल सिस्टम एपीआई में अंतर की वजह से, एपीआई का यह हिस्सा ही किसी खास प्लैटफ़ॉर्म के सोर्स सेट में होना ज़रूरी है.

सामान्य

// shared/src/androidMain/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

DataStore इंस्टेंस बनाने के लिए, आपको फ़ाइल पाथ के साथ-साथ Context की ज़रूरत होगी.

// shared/src/androidMain/kotlin/createDataStore.android.kt

fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
    producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)

iOS

DataStore इंस्टेंस बनाने के लिए, आपको DataStore फ़ैक्ट्री के साथ-साथ DataStore पाथ की ज़रूरत होगी.

// shared/src/iosMain/kotlin/createDataStore.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"
    }
)