StateFlow.value 不应在组合内调用

jc1*_*c12 23 android android-jetpack-compose

我今天下载了 Android Studio Bumblebee beta 并注意到一个新警告:

“StateFlow.value 不应在组合内调用”

为什么我们不应该在组合中调用 StateFlow.value ?

Cab*_*zas 34

就我而言,我.collectAsState()这样添加

@Composable
fun yourScreen() {
    val state = viewModel.viewState.collectAsState()
    when (state.value) {
        // your code
    } 
}
   
Run Code Online (Sandbox Code Playgroud)


Nek*_*cer 17

因为在作曲中你应该倾听事件,而不仅仅是阅读当前的事件。如果您只读取当前视图,则在值更改后您的视图将不会重新组合。

我的意思是 - 也许有一个有效的用例,但我从未遇到过。我想您看到的警告只是警告用户他们正在尝试做一些他们可能不想做的事情

  • 与 StateFlow.value 完全相同,您只需读取当前值。要获取更新,请使用@Cabezas代码示例中的collectAsState()方法 (2认同)
  • 这里有令人惊讶的好文档 https://googlesamples.github.io/android-custom-lint-rules/checks/StateFlowValueCalledInComposition.md.html (2认同)