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

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

নির্ভরতা সেট আপ করুন

আপনার KMP প্রোজেক্টে DataStore সেট আপ করতে, আপনার মডিউলের build.gradle.kts ফাইলে আর্টিফ্যাক্টগুলোর জন্য ডিপেন্ডেন্সিগুলো যোগ করুন:

commonMain.dependencies {
  // DataStore library
  implementation("androidx.datastore:datastore:1.2.1")
  // The Preferences DataStore library
  implementation("androidx.datastore:datastore-preferences:1.2.1")
}

ডেটাস্টোর ক্লাসগুলি সংজ্ঞায়িত করুন

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

ডেটাস্টোর ইনস্ট্যান্স তৈরি করুন

প্রতিটি প্ল্যাটফর্মে 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"

অ্যান্ড্রয়েড

অ্যান্ড্রয়েডে DataStore ইনস্ট্যান্স তৈরি করতে পাথের সাথে একটি Context প্রয়োজন হয়।

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

fun createDataStore(): DataStore<Preferences> = createDataStore(
    storage = FileStorage(
        serializer = PreferencesSerializer,
        produceFile = { context.filesDir.resolve(dataStoreFileName) }
    )
)

আইওএস

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 ইনস্ট্যান্স তৈরি করতে, Java বা Kotlin API ব্যবহার করে একটি পাথ প্রদান করুন:

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

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