我使用Textfield来获取用户输入,并使用stateflow来处理视图模型中的文本状态/值.
事情是每次文本字段值改变时,HomeContent()函数都会被重组. Layout inspector output image个 我的问题是整个HomeContent()函数正在被重新组合吗 仅仅因为文本字段值的改变或它们是避免函数重组的一种方法.
视图模型
class My视图模型() : 视图模型() {
private val _nameFlow = MutableStateFlow("")
val nameFlow = _nameFlow.asStateFlow()
fun updateName(name: String) {
_nameFlow.value = name
}
}
主活性
class 主活性 : ComponentActivity() {
private val my视图模型 by viewModels<My视图模型>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
AppArchitectureTheme {
HelloScreen(my视图模型)
}
}
}
}
主屏幕
@Composable
fun HelloScreen(viewModel: My视图模型) {
val name = viewModel.nameFlow.collectAsState()
HelloContent(
provideName = { name.value },
onNameChange = { viewModel.updateName(it) })
}
@Composable
fun HelloContent(
provideName: () -> String,
onNameChange: (String) -> Unit
) {
Column(modifier = Modifier.padding(16.dp)) {
Text(
text = "Hello,",
modifier = Modifier.padding(bottom = 8.dp),
style = MaterialTheme.typography.h5
)
OutlinedTextField(
value = provideName(),
onValueChange = { onNameChange(it) },
label = { Text("Name") }
)
Button(
onClick = {}
) {
Text(text = "Dummy Button")
}
}
}