package
com.example.store_state_info
import
android.os.Bundle
import
androidx.activity.compose.setContent
import
androidx.compose.material.Text
import
androidx.compose.runtime.Composable
import
androidx.compose.ui.Modifier
import
androidx.compose.ui.tooling.preview.Preview
import
androidx.appcompat.app.AppCompatActivity
import
androidx.compose.foundation.layout.Column
import
androidx.compose.foundation.layout.Row
import
androidx.compose.foundation.layout.fillMaxHeight
import
androidx.compose.foundation.layout.fillMaxWidth
import
androidx.compose.foundation.layout.padding
import
androidx.compose.material.Button
import
androidx.compose.material.ButtonDefaults
import
androidx.compose.material.Divider
import
androidx.compose.runtime.getValue
import
androidx.compose.runtime.mutableStateOf
import
androidx.compose.runtime.remember
import
androidx.compose.runtime.setValue
import
androidx.compose.ui.unit.dp
class
StateActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super
.onCreate(savedInstanceState)
setContent {
Column(modifier = Modifier.fillMaxWidth()) {
StateComponent()
Divider()
ModelComponent()
}
}
}
}
@Composable
fun StateComponent() {
var counter by remember { mutableStateOf(
0
) }
Text(
"Example using state class to store state"
)
Row(modifier = Modifier.fillMaxWidth()) {
Button(
modifier = Modifier.padding(
16
.dp).weight(1f),
elevation = ButtonDefaults.elevation(
5
.dp),
onClick = {
counter++
}) {
Text(text =
"Increment"
,
modifier = Modifier.padding(
16
.dp))
}
Button(
modifier = Modifier.padding(
16
.dp).weight(1f),
elevation = ButtonDefaults.elevation(
5
.dp),
onClick = {
counter =
0
}) {
Text(text =
"Reset"
,
modifier = Modifier.padding(
16
.dp))
}
}
Text(text =
"Counter value is $counter"
,
modifier = Modifier.padding(
16
.dp))
}
@Composable
fun ModelComponent() {
var counterState by remember { mutableStateOf(CounterState()) }
Text(
"Example using Model class to store state"
)
Row(modifier = Modifier.fillMaxWidth()) {
Button(
modifier = Modifier.padding(
16
.dp).weight(1f),
elevation = ButtonDefaults.elevation(
5
.dp),
onClick = {
counterState = counterState.copy(counter = counterState.counter +
1
)
}) {
Text(text =
"Increment"
,
modifier = Modifier.padding(
16
.dp))
}
Button(
modifier = Modifier.padding(
16
.dp).weight(1f),
elevation = ButtonDefaults.elevation(
5
.dp),
onClick = {
counterState = counterState.copy(counter =
0
)
}) {
Text(text =
"Reset"
,
modifier = Modifier.padding(
16
.dp))
}
}
Text(text =
"Counter value is ${counterState.counter}"
,
modifier = Modifier.padding(
16
.dp))
}
data
class
CounterState(val counter: Int =
0
)
@Preview
(
"Example using state delegate"
)
@Composable
fun StateComponentPreview() {
Column(modifier = Modifier.fillMaxHeight()) {
StateComponent()
}
}
@Preview
(
"Example using Model annotation"
)
@Composable
fun ModelComponentPreview() {
Column(modifier = Modifier.fillMaxHeight()) {
ModelComponent()
}
}