_jetpack compose 使用 uiState 和 _uiState 两个属性名,其中 uiState 是公共的可观察属性,而 _uiState 是私有的可变属性。在 ViewModel 中获取 uiState 时,应该使用公共属性名 uiState。
以下是使用 ViewModel 和 _uiState 的示例:
class MyViewModel : ViewModel() {
private val _uiState = mutableStateOf(MyUiState())
val uiState: State = _uiState
//...
}
在 Activity 或 Compose 中使用视图模型的示例:
class MyComposable(private val viewModel: MyViewModel) : Composable {
val uiState = viewModel.uiState.value // should use public property
//val uiState = viewModel._uiState.value // should NOT use private property
//...
}
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyComposable(viewModel = viewModel)
}
}
}