【发布时间】:2021-10-13 04:52:29
【问题描述】:
我有以下 ViewModel:
data class Input(
val email: String = "",
val password: String = ""
)
class LoginViewModel : ViewModel() {
private val _input = MutableStateFlow(Input())
val input = _input.asStateFlow()
fun onEmailChange(value: String) {
_input.value = _input.value.copy(email = value)
}
fun onPasswordChange(value: String) {
_input.value = _input.value.copy(password = value)
}
}
我不喜欢onEmailChange 和onPasswordChange 的方法,因为我必须为Input 类的每个属性复制这样的代码。我想知道我是否可以让它更短并且没有代码重复?
我的可组合:
@Composable
fun LoginScreen(loginViewModel: LoginViewModel = viewModel()) {
val input by loginViewModel.input.collectAsState()
Column {
TextField(
label = { Text("Email") },
value = input.email,
onValueChange = loginViewModel::onEmailChange,
singleLine = true
)
TextField(
label = { Text("Password") },
value = input.password,
onValueChange = loginViewModel::onPasswordChange,
singleLine = true
)
}
}
【问题讨论】:
-
这种重复可能没什么问题?
标签: android kotlin android-jetpack-compose