例如,我有一个简单的组合函数
@Composable
fun TextExample(model: SomeViewModel = viewModel()) {
TextButton(onClick = { model.onClick() }) {
Text(text = "Test")
}
}
SomeView模型:
class SomeViewModel : ViewModel() {
private val _text = mutableStateOf("Test")
val text: String
get() = _text.value
fun onClick() {
if (text.isEmpty()) {
// TODO: need to start some activity
} else {
_text.value = ""
}
}
}
我点击这个按钮,然后模型必须处理这个点击。在某些情况下,我需要开始另一个活动。什么是正确的方式来做到这一点?
1条答案
按热度按时间af7jpaap1#
可能有更好的方法,但你可以考虑我的。
我建议首先用
Sealed Class
为“一次性事件”创建一个数据结构,如下所示在ViewModel中声明将发出这些事件的
SharedFlow
在您的示例中,从onClick视图模型函数发出一个事件,如下所示
现在在你的可组合函数中,在
LaunchedEffect
中观察它,就像这样如果您还没有为调用startActivity做好准备,我建议您访问这篇文章作为参考。