在 Jetpack Compose 中,我可以使用状态提升并将 state/setState 向下传递到层次结构中的多个可组合对象(使用不同的包)吗?
我有以下问题:
@Composable
fun JetpackComposeApp() {
var theme by rememberSaveable {
mutableStateOf(ThemeState(isDarkTheme = isDarkTheme))
}
...
NavHost(...) {
composable(route = MainNavRoutes.Settings) {
SettingsScreen(hiltViewModel(it), theme) { newTheme ->
theme = newTheme
}
}
}
}
以上有效。 SettingsScreen 正确更新整个主题。
但是如果我将 Navhost 重构为带有参数(主题、setTheme)的不同包,setter 可以工作,但 SettingsScreen 不会获得更新的主题。主题永远是旧的。
状态提升是否仅限于某些事情?喜欢包/组合优化? 或者我在这里遗漏了什么?
以上内容可以在 repo: link, files: MainActivity, SettingsScreen 中找到。
答案 0 :(得分:0)
更新/观察状态值即使在调用堆栈很深的情况下也应该起作用,如果我正确理解您的问题,您应该将 setTheme
包装在 rememberUpdatedState()
中的 SettingsScreen
中并访问/提升此更新价值