//Step1: Implement these 3 Dependencies in build.gradle.kts(Module:app)
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.5")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5")
implementation("androidx.compose.material3:material3:1.3.0")
//Step2: Create CounterViewModel.kt
package com.example.incrementviewmodel
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
class CounterViewModel: ViewModel(){
//Mutable State Flow to hold the counter value
//StateFlow is a read only data stream
private val _counter = MutableStateFlow(0)
val counter : StateFlow<Int> = _counter
fun incrementcounter(){
_counter.value +=1
}
}
//MainActivity.kt
package com.example.incrementviewmodel
import android.os.Bundle
import androidx.compose.foundation.layout.*//Import compose layout
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewmodel.compose.viewModel//Import this
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
display()
}
}
}
@Composable
fun display(counterViewModel: CounterViewModel = viewModel()){
val counterState = counterViewModel.counter.collectAsState()
Column( modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(text = "Counter: ${counterState.value}")
Spacer(modifier = Modifier.height(30.dp))
Button(onClick = {counterViewModel.incrementcounter()}) {
Text(text = "Increment")
}
}
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter