Jetpack 组合状态提升

时间:2021-07-03 11:35:05

标签: android android-jetpack-compose

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

1 个答案:

答案 0 :(得分:0)

更新/观察状态值即使在调用堆栈很深的情况下也应该起作用,如果我正确理解您的问题,您应该将 setTheme 包装在 rememberUpdatedState() 中的 SettingsScreen 中并访问/提升此更新价值