KMP-এর জন্য DataStore সেট-আপ করা

DataStore লাইব্রেরি অ্যাসিঙ্ক্রোনাস, সামঞ্জস্যপূর্ণ এবং ট্রানজ্যাকশনাল উপায়ে ডেটা স্টোর করে, SharedPreferences-এর কিছু ত্রুটি কাটিয়ে ওঠে। এই পৃষ্ঠাটি Kotlin Multiplatform (KMP) প্রোজেক্টে DataStore তৈরি করার উপর ফোকাস করে। DataStore সম্পর্কে আরও তথ্যের জন্য, DataStore-এর প্রাথমিক ডকুমেন্টেশন দেখুন।

ডিপেন্ডেন্সি সেট-আপ করুন

আপনার KMP প্রোজেক্টে DataStore সেট-আপ করতে, আপনার মডিউলের জন্য 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 ক্লাসগুলি সংজ্ঞায়িত করুন

আপনার শেয়ার করা KMP মডিউলের সাধারণ সোর্সের মধ্যে DataStoreFactory সহ DataStore ক্লাস আপনি সংজ্ঞায়িত করতে পারবেন। এই ক্লাসগুলি সাধারণ সোর্সে রাখলে, সেগুলি সব টার্গেট প্ল্যাটফর্ম জুড়ে শেয়ার করা যায়। আপনি প্ল্যাটফর্ম-নির্দিষ্ট ইমপ্লিমেন্টেশন তৈরি করতে actual এবং expect ডিক্লারেশন ব্যবহার করতে পারেন।

DataStore ইনস্ট্যান্স তৈরি করা

প্রতিটি প্ল্যাটফর্মে DataStore অবজেক্ট কীভাবে ইনস্ট্যান্টিয়েট করতে হবে তা আপনাকে নির্ধারণ করতে হবে। ফাইল সিস্টেম API-এর মধ্যে পার্থক্যের কারণে নির্দিষ্ট প্ল্যাটফর্ম সোর্স সেটে API-এর শুধুমাত্র এই অংশটিই প্রয়োজন।

সাধারণ

// 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

Android-এ DataStore ইনস্ট্যান্স তৈরি করতে, আপনার 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 (ডেস্কটপ)

JVM (ডেস্কটপ)-এ DataStore ইনস্ট্যান্স তৈরি করতে, Java বা Kotlin API ব্যবহার করে পাথ প্রদান করুন:

// shared/src/jvmMain/kotlin/createDataStore.desktop.kt

fun createDataStore(): DataStore<Preferences> = createDataStore(
    storage = FileStorage(
        serializer = PreferencesFileSerializer,
        produceFile = { File(System.getProperty("java.io.tmpdir"), dataStoreFileName) }
    )
)