Jetpack Compose-এর State Functions সম্পূর্ণভাবে
🚀 Jetpack Compose-এর State Functions সম্পূর্ণভাবে মস্তিষ্ক-বান্ধব ব্যাখ্যা
Jetpack Compose-এ State হলো UI-এর প্রাণ। 🧠🔥
যখনই কোনো UI পরিবর্তন করতে হয়, তখন State Functions ব্যবহার করতে হয়।
কিন্তু State কীভাবে কাজ করে? 🤔
এটি সহজভাবে বুঝতে হলে, আসুন একটি গল্পের মাধ্যমে শিখি! 😃
🛒 কল্পনা করুন:
আপনার একটি ফলের দোকান আছে। 🍎🍌🍇
✅ State হলো দোকানের ফলের তালিকা (Inventory)।
✅ UI হলো কাস্টমার, যারা ফল দেখতে চায়।
✅ State Functions হলো বিভিন্ন স্টোর ম্যানেজমেন্ট সিস্টেম, যা তালিকা আপডেট করে।
এখন আসুন, Jetpack Compose-এর গুরুত্বপূর্ণ State Functions গুলো ধাপে ধাপে বুঝি। 🚀
🟢 1️⃣ remember { mutableStateOf() } → সাধারণ State ম্যানেজমেন্ট
😃 গল্প:
আপনার দোকানে 🍎 আপেল রাখা আছে, এবং কাস্টমার এটি দেখতে পাচ্ছে।
কিন্তু যখনই কাস্টমার একটি আপেল কেনে, তখন আপনাকে তালিকা আপডেট করতে হবে।
এটি আমরা remember { mutableStateOf() } দিয়ে করতে পারি।
🟢 কোড:
var appleCount by remember { mutableStateOf(5) }
Text(text = "Apple Stock: $appleCount")
Button(onClick = { appleCount-- }) {
Text("Buy an Apple 🍏")
}
✅ remember = UI পুনরায় আঁকলে (Recompose) আগের স্টেট মনে রাখবে।
✅ mutableStateOf() = এটি স্টেট ধারণ করে এবং পরিবর্তিত হলে UI আপডেট করে।
🟣 2️⃣ rememberSaveable() → UI রিস্টার্ট হলেও State হারাবে না!
😲 সমস্যা:
কাস্টমার যদি দোকান থেকে বের হয়ে আবার আসে (অ্যাপ বন্ধ করে খুলে), তাহলে State হারিয়ে যায়!
😱 আগে:
var appleCount by remember { mutableStateOf(5) }
🔥 এটি অ্যাপ রিস্টার্ট হলে হারিয়ে যাবে!
😃 সমাধান:
var appleCount by rememberSaveable { mutableStateOf(5) }
✅ rememberSaveable = UI Destroy হলেও স্টেট মনে রাখবে (Screen Rotation, Process Death ইত্যাদি)।
🟠 3️⃣ derivedStateOf() → অটোমেটিক স্টেট ডেরিভেশন (কম্পিউটেড ভ্যালু)
😃 গল্প:
আপনার দোকানে 🍌 ১০টা কলা আছে।
আপনি চান, যখনই কলা ৫-এর নিচে যাবে, তখন "Stock Low!" মেসেজ দেখাবে।
এটি derivedStateOf() দিয়ে করতে পারি, যাতে প্রতি বার UI না রিফ্রেশ হয়।
🟢 কোড:
var bananaCount by remember { mutableStateOf(10) }
val isStockLow by remember {
derivedStateOf { bananaCount < 5 }
}
Text(text = "Banana Stock: $bananaCount")
if (isStockLow) {
Text(text = "⚠️ Stock Low!")
}
Button(onClick = { bananaCount-- }) {
Text("Buy a Banana 🍌")
}
✅ derivedStateOf() = শুধুমাত্র প্রয়োজন হলে Recalculate করবে।
✅ Performance ভালো থাকে!
🔵 4️⃣ produceState() → External Data থেকে State পরিবর্তন
😃 গল্প:
আপনার দোকানের স্টক Firebase থেকে আসছে।
এখন আপনি চান, যখনই Firebase ডাটা আপডেট হবে, তখন UI-তে দেখাবে।
🔥 Solution: produceState()
এটি Coroutines ব্যবহার করে Live Data কে State-এ রূপান্তর করে।
🟢 কোড:
val stock by produceState(initialValue = "Loading...") {
delay(2000) // Mock Network Delay
value = "Stock Updated: 10 Apples 🍏"
}
Text(text = stock)
✅ produceState() = Background থেকে ডাটা এনে UI আপডেট করবে।
✅ সেটা হতে পারে Network Call, Database, অথবা সেন্সর ডাটা।
🟡 5️⃣ snapshotFlow() → StateFlow থেকে UI-তে State আপডেট
😃 গল্প:
আপনার দোকানে 🥭 ২০টা আম আছে, এবং ViewModel থেকে Stock আপডেট হবে।
এখন চাই, StateFlow-এর ভ্যালু পরিবর্তিত হলে, UI তাত্ক্ষণিক আপডেট হবে।
🔥 Solution: snapshotFlow()
এটি StateFlow-এর স্টেটকে Observe করে, এবং UI-তে আপডেট পাঠায়।
🟢 কোড:
val mangoStock = MutableStateFlow(20)
LaunchedEffect(Unit) {
snapshotFlow { mangoStock.value }.collect { newStock ->
println("New Mango Stock: $newStock")
}
}
✅ snapshotFlow() = StateFlow বা LiveData কে UI State-এ রূপান্তর করে।
🔴 6️⃣ rememberCoroutineScope() → Coroutine-এর ভিতরে State পরিবর্তন
😃 গল্প:
আপনি চান, কাস্টমার যখনই কোনো অর্ডার দেবে, সেটা ২ সেকেন্ড পরে ডেলিভারি হবে।
তাহলে আমরা Coroutine ব্যবহার করবো।
🔥 Solution: rememberCoroutineScope()
এটি UI-এর Lifecycle-aware Coroutine চালাতে সাহায্য করে।
🟢 কোড:
val scope = rememberCoroutineScope()
var coffeeReady by remember { mutableStateOf("Not Ready ☕") }
Button(onClick = {
scope.launch {
delay(2000) // 2 সেকেন্ড পর ডেলিভারি হবে
coffeeReady = "Ready to Serve! ☕"
}
}) {
Text("Order Coffee ☕")
}
Text(text = coffeeReady)
✅ rememberCoroutineScope() = UI Destroy হলে Coroutine বন্ধ হয়ে যাবে।
✅ যদি API Call বা Delay দরকার হয়, তাহলে এটি ব্যবহার করুন।
🚀 Jetpack Compose-এর State Functions এক নজরে!
| Function | কাজ | ব্যবহার |
|---|---|---|
remember { mutableStateOf() } |
সাধারণ State ধারণ করে | ছোটখাটো UI আপডেটের জন্য |
rememberSaveable() |
UI Destroy হলেও State মনে রাখবে | Configuration Change-এর জন্য |
derivedStateOf() |
অন্য State থেকে নতুন State তৈরি | Performance Optimization |
produceState() |
Background থেকে Data এনে UI আপডেট | API Call, Sensor Data |
snapshotFlow() |
StateFlow থেকে UI-তে ডাটা পাঠাবে | ViewModel-এর StateFlow ব্যবহারের জন্য |
rememberCoroutineScope() |
Coroutine চালাতে সাহায্য করে | Delay বা API Call-এর জন্য |
📌 শেষ কথা:
✔️ "State" মানেই UI-এর ভিতরের Data।
✔️ Jetpack Compose-এর State Functions ব্যবহার করলে UI স্মার্ট হবে।
✔️ Performance বাড়াতে হলে সঠিক State Function ব্যবহার করা দরকার!
এখন আশা করি, Jetpack Compose-এর State Functions আপনার মস্তিষ্কে চিরস্থায়ী হয়ে গেছে! 😃🚀
Comments
Post a Comment