首页 > 解决方案 > Jetpack 组成状态提升

问题描述

在 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 中找到。

标签: androidandroid-jetpack-compose

解决方案


即使使用深度调用堆栈,更新/观察状态值也应该有效,如果我正确理解您的问题,您应该在您setThemerememberUpdatedState()内部包装SettingsScreen并访问/提升这个更新的值


推荐阅读