vide
06/30/2022, 11:43 AM/* Screen 1 */
data class ScreenState(
val firstName: String,
val lastName: String,
)
@Composable fun Screen() {
val screenState = remember { mutableStateOf(ScreenState("Hello", "World")) }
SomeComponent(
firstName = screenState.value.firstName,
lastName = screenState.value.lastName,
setFirstName = { screenState.value = screenState.value.copy(firstName = it) }
)
}
/* Screen 2 */
class ScreenState2() {
private val _firstName = mutableStateOf("Hello")
val firstName: State<String> get() = _firstName
fun setFirstName(name: String) { _firstName.value = name }
private val _lastName = mutableStateOf("World")
val lastName: State<String> get() = _lastName
}
@Composable fun Screen2(screenState: ScreenState2) {
SomeComponent(
firstName = screenState.firstName.value,
lastName = screenState.lastName.value,
setFirstName = screenState::setFirstName,
)
}
@Composable fun SomeComponent(firstName: String, lastName: String, setFirstName: (String) -> Unit) {
TODO()
}
ste
06/30/2022, 11:47 AMclass ScreenState(
firstNameState: MutableState<String>,
lastNameState: MutableState<String>,
) {
var firstName by firstNameState
var lastName by lastNameState
}
@Composable
fun rememberScreenState() {
val firstNameState = rememeber { mutableStateOf("") }
val lastNameState = rememeber { mutableStateOf("") }
return remember {
ScreenState(firstNameState, lastNameState)
}
}
Zoltan Demant
06/30/2022, 12:49 PMmyanmarking
06/30/2022, 1:20 PMCasey Brooks
06/30/2022, 1:26 PMStates
for each property. The high-level reasoning is that it is difficult to combine those individual properties if you need to use both values at once, but combining properties is trivial when the state is just an immutable data class.
I’ve got a much more in-depth discussion on how to model state in the documentation for my MVI library, ballastmyanmarking
06/30/2022, 1:50 PMagrosner
06/30/2022, 2:29 PMColton Idle
06/30/2022, 2:50 PMagrosner
06/30/2022, 2:53 PMmyanmarking
06/30/2022, 2:54 PMColton Idle
06/30/2022, 2:55 PMAlbert Chang
06/30/2022, 3:52 PMagrosner
06/30/2022, 4:26 PMvide
06/30/2022, 7:43 PM