DataStore লাইব্রেরি অ্যাসিঙ্ক্রোনাস, সামঞ্জস্যপূর্ণ এবং ট্রানজ্যাকশনাল উপায়ে ডেটা স্টোর করে, SharedPreferences-এর কিছু ত্রুটি কাটিয়ে ওঠে। এই পৃষ্ঠায় Kotlin Multiplatform (KMP) প্রোজেক্টে DataStore তৈরি করার বিষয়ে আলোকপাত করা হয়েছে। DataStore সম্পর্কে আরও তথ্যের জন্য, DataStore-এর প্রাথমিক ডকুমেন্টেশন এবং অফিসিয়াল নমুনা দেখুন।
ডিপেন্ডেন্সি সেট-আপ করুন
আপনার KMP প্রোজেক্টে DataStore সেট-আপ করতে, আপনার মডিউলের জন্য build.gradle.kts ফাইলে আর্টিফ্যাক্টের জন্য ডিপেন্ডেন্সি যোগ করুন:
commonMain.dependencies {
// DataStore library
implementation("androidx.datastore:datastore-core:1.2.1")
// The Preferences DataStore library
implementation("androidx.datastore:datastore-preferences-core:1.2.1")
}
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 = PreferencesSerializer,
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 = PreferencesSerializer,
produceFile = { File(System.getProperty("java.io.tmpdir"), dataStoreFileName) }
)
)