🚀 ViewModel – āĻĢিāϚাāϰ āĻ“ āĻŦ্āϝāĻŦāĻšাāϰ (Brain-Friendly āĻŦ্āϝাāĻ–্āϝা!)

 

🚀 ViewModel – āĻĢিāϚাāϰ āĻ“ āĻŦ্āϝāĻŦāĻšাāϰ (Brain-Friendly āĻŦ্āϝাāĻ–্āϝা!) đŸŽ¯

🔍 ViewModel āĻ•ী?

ViewModel āĻšāϞ Jetpack āϞাāχāĻŦ্āϰেāϰিāϰ āĻāĻ•āϟি āĻ•্āϞাāϏ, āϝা UI-āĻāϰ āϏাāĻĨে āϏāĻŽ্āĻĒāϰ্āĻ•িāϤ āĻĄাāϟা āϏংāϰāĻ•্āώāĻŖ āĻ“ āĻĒāϰিāϚাāϞāύা āĻ•āϰে, āϝাāϤে āϏ্āĻ•্āϰিāύ āϰিāĻĢ্āϰেāĻļ āĻŦা āĻ…্āϝাāĻ•্āϟিāĻ­িāϟি āϧ্āĻŦংāϏ āĻšāϞেāĻ“ āĻĄাāϟা āĻšাāϰি⧟ে āύা āϝা⧟।


✨ ViewModel-āĻāϰ āĻ—ুāϰুāϤ্āĻŦāĻĒূāϰ্āĻŖ āĻĢিāϚাāϰāϏāĻŽূāĻš

1️⃣ UI-āĻāϰ āϜāύ্āϝ āĻĄাāϟা āϏংāϰāĻ•্āώāĻŖ āĻ•āϰে

👉 UI-āĻāϰ āϏাāĻĨে āϏāĻŽ্āĻĒāϰ্āĻ•িāϤ āĻĄাāϟা āϏংāϰāĻ•্āώāĻŖ āĻ•āϰāϤে ViewModel āĻŦ্āϝāĻŦāĻšাāϰ āĻ•āϰা āĻšā§Ÿ, āϝাāϤে āϏ্āĻ•্āϰিāύ āϘোāϰাāϞেāĻ“ (Configuration Change) āĻĄাāϟা āĻšাāϰা⧟ āύা।

āωāĻĻাāĻšāϰāĻŖ:

class CounterViewModel : ViewModel() {
    var count by mutableStateOf(0)
        private set

    fun increment() {
        count++
    }
}

➡️ āĻāĻ–াāύে ViewModel "count" āĻĄাāϟা āϏংāϰāĻ•্āώāĻŖ āĻ•āϰāĻ›ে, āϝা UI-āĻāϰ āϏাāĻĨে āϏংāϝুāĻ•্āϤ āĻĨাāĻ•āĻŦে।


2️⃣ Configuration Change āϟিāĻ•ে āĻĨাāĻ•āϤে āĻĒাāϰে

👉 āĻ…āύ্āϝ āĻ•োāύো āĻ•্āϞাāϏ āĻŦা āĻ­েāϰি⧟েāĻŦāϞ āϏāϰাāϏāϰি UI-āϤে āϏংāϰāĻ•্āώāĻŖ āĻ•āϰāϞে āϏ্āĻ•্āϰিāύ āϘোāϰাāύোāϰ (orientation change) āϏāĻŽā§Ÿ āĻĄাāϟা āĻšাāϰি⧟ে āϝাāĻŦে। āĻ•িāύ্āϤু ViewModel āĻŦ্āϝāĻŦāĻšাāϰেāϰ āĻĢāϞে āĻĄাāϟা āϟিāĻ•ে āĻĨাāĻ•āĻŦে।

✔️ āϝেāĻŽāύ:

@Composable
fun CounterScreen(viewModel: CounterViewModel = viewModel()) {
    Column {
        Text("Count: ${viewModel.count}")
        Button(onClick = { viewModel.increment() }) {
            Text("Increment")
        }
    }
}

āĻāĻ–āύ āϏ্āĻ•্āϰিāύ āϰিāĻĢ্āϰেāĻļ āĻšāϞেāĻ“ count āĻšাāϰাāĻŦে āύা!


3️⃣ Lifecycle-Aware (āϞাāχāĻĢāϏাāχāĻ•েāϞ āĻŽেāύে āϚāϞে)

👉 ViewModel āĻ…্āϝাāĻ•্āϟিāĻ­িāϟি āĻŦা āĻĢ্āϰ্āϝাāĻ—āĻŽেāύ্āϟ āϧ্āĻŦংāϏ āύা āĻšāĻ“ā§Ÿা āĻĒāϰ্āϝāύ্āϤ āϞাāχāĻĢāϏাāχāĻ•েāϞ āĻŽেāύে āϚāϞে, āϤাāχ āĻŽেāĻŽোāϰি āϞিāĻ• āĻ•āĻŽ āĻšā§Ÿ।

✔️ āωāĻĻাāĻšāϰāĻŖ:

class MyViewModel : ViewModel() {
    init {
        println("ViewModel Created!") // āĻļুāϧু āĻāĻ•āĻŦাāϰ āϚāϞāĻŦে
    }

    override fun onCleared() {
        println("ViewModel Destroyed!") // āϝāĻ–āύ āĻ…্āϝাāĻ•্āϟিāĻ­িāϟি āϧ্āĻŦংāϏ āĻšāĻŦে āϤāĻ–āύ āϚāϞāĻŦে
    }
}

ViewModel āϤৈāϰি āĻšāĻ“ā§Ÿাāϰ āĻĒāϰ āϝāϤāĻŦাāϰ UI āϰিāĻĢ্āϰেāĻļ āĻšোāĻ•, āύāϤুāύ āĻ•āϰে āϤৈāϰি āĻšāĻŦে āύা!


4️⃣ Dependency Injection āϏাāĻĒোāϰ্āϟ āĻ•āϰে

👉 Hilt āĻŦা āĻ…āύ্āϝ DI āϞাāχāĻŦ্āϰেāϰি āĻĻি⧟ে āϏāĻšāϜেāχ ViewModel āĻŦ্āϝāĻŦāĻšাāϰ āĻ•āϰা āϝা⧟, āϝা āĻ•োāĻĄ āĻ•্āϞিāύ āĻ“ āĻŽāĻĄুāϞাāϰ āĻ•āϰে।

✔️ Hilt āĻŦ্āϝāĻŦāĻšাāϰ āĻ•āϰে ViewModel:

@HiltViewModel
class MyViewModel @Inject constructor(
    private val repository: MyRepository
) : ViewModel() {
    val data = repository.getData()
}

āĻāϤে āĻĄাāϟা āĻ“ āϞāϜিāĻ• āĻŽāĻĄুāϞাāϰ āĻ“ āϏāĻšāϜāĻ­াāĻŦে āĻŦ্āϝāĻŦāϏ্āĻĨাāĻĒāύা āĻ•āϰা āϝা⧟।


5️⃣ Coroutines āĻāĻŦং LiveData / StateFlow āϏাāĻĒোāϰ্āϟ āĻ•āϰে

👉 ViewModel āĻāϰ āϏাāĻĨে Coroutines āĻŦ্āϝāĻŦāĻšাāϰ āĻ•āϰে āĻŦ্āϝাāĻ•āĻ—্āϰাāωāύ্āĻĄ āĻ•াāϜ āĻ•āϰা āϝা⧟।

✔️ Coroutine āĻŦ্āϝāĻŦāĻšাāϰ āĻ•āϰে āĻĄাāϟা āϞোāĻĄ āĻ•āϰা:

class MyViewModel : ViewModel() {
    private val _data = MutableLiveData<String>()
    val data: LiveData<String> = _data

    fun fetchData() {
        viewModelScope.launch {
            delay(2000) // āϏিāĻŽুāϞেāϟেāĻĄ āϞোāĻĄিং āϟাāχāĻŽ
            _data.value = "Data Loaded!"
        }
    }
}

āĻāϤে UI āĻŦ্āϞāĻ• āύা āĻ•āϰেāχ āĻĄাāϟা āϞোāĻĄ āĻ•āϰা āϝা⧟।


🛠️ ViewModel-āĻāϰ āĻŦ্āϝāĻŦāĻšাāϰ āĻ•োāĻĨা⧟?

🔹 UI State āĻŽ্āϝাāύেāϜ āĻ•āϰāϤে – āϝেāĻŽāύ: āĻ•াāωāύ্āϟাāϰ, āϞিāϏ্āϟ, āϟেāĻ•্āϏāϟ āχāύāĻĒুāϟ āχāϤ্āϝাāĻĻি।
🔹 Configuration Change āĻĨেāĻ•ে āĻŦাঁāϚāϤে – āϏ্āĻ•্āϰিāύ āϘোāϰাāϞে āĻŦা āĻ…্āϝাāĻ•্āϟিāĻ­িāϟি āϧ্āĻŦংāϏ āĻšāϞেāĻ“ āĻĄাāϟা āĻĨাāĻ•āĻŦে।
🔹 Background Task āĻĒāϰিāϚাāϞāύা āĻ•āϰāϤে – āĻŦ্āϝাāĻ•āĻ—্āϰাāωāύ্āĻĄে āĻĄাāϟা āϞোāĻĄ āĻŦা API āĻ•āϞ āĻ•āϰāϤে।
🔹 Lifecycle-Aware Data Store āĻ•āϰāϤে – āϝেāĻŽāύ: LiveData, Flow āĻŦা StateFlow āĻŦ্āϝāĻŦāĻšাāϰ āĻ•āϰে UI āφāĻĒāĻĄেāϟ āĻ•āϰা।
🔹 Dependency Injection-āĻāϰ āϏাāĻĨে āĻŦ্āϝāĻŦāĻšাāϰ āĻ•āϰāϤে – āϝেāĻŽāύ Hilt āĻŦা Dagger।


🔍 āϏংāĻ•্āώেāĻĒে ViewModel

✔️ UI-āĻāϰ āϜāύ্āϝ āĻĄাāϟা āϏংāϰāĻ•্āώāĻŖ āĻ•āϰে।
✔️ Configuration Change āĻšāϞেāĻ“ āĻĄাāϟা āĻšাāϰা⧟ āύা।
✔️ Lifecycle-aware, āϤাāχ āĻŽেāĻŽোāϰি āĻ…āĻĒāϚ⧟ āĻ•āĻŽ āĻšā§Ÿ।
✔️ Background Task āĻĒāϰিāϚাāϞāύা āĻ•āϰāϤে āĻĒাāϰে।
✔️ Dependency Injection āϏāĻšāϜ āĻ•āϰে।
✔️ Coroutines, LiveData, StateFlow-āĻāϰ āϏাāĻĨে āĻ•াāϜ āĻ•āϰে।

đŸ”Ĩ āĻāĻ–āύ āφāĻĒāύি ViewModel-āĻāϰ āĻļāĻ•্āϤি āĻŦ্āϝāĻŦāĻšাāϰ āĻ•āϰে Jetpack Compose-āĻ āϏ্āĻŽাāϰ্āϟ āĻ“ āĻĒাāϰāĻĢāϰāĻŽ্āϝাāύ্āϟ āĻ…্āϝাāĻĒ āϤৈāϰি āĻ•āϰāϤে āĻĒাāϰāĻŦেāύ! 🚀

Comments

Popular posts from this blog

AI (Artificial Intelligence) āϏāĻšāϜāĻ­াāĻŦে āĻŦোāĻাāϰ āϜāύ্āϝ āĻāĻ•āĻĻāĻŽ āĻŽāϏ্āϤিāώ্āĻ•-āĻŦাāύ্āϧāĻŦ āĻŦ্āϝাāĻ–্āϝা 🧠🤖

🧠 Regex āĻ•ী?

Kotlin-āĻ āĻ­েāϰিāϝ়েāĻŦāϞ āϘোāώāĻŖা āĻ•āϰাāϰ āĻĻুāχ āωāĻĒাāϝ়