【问题标题】:Jetpack compose State HoistingJetpack 组成状态提升
【发布时间】:2021-07-08 00:11:16
【问题描述】:

在 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,文件:MainActivity,SettingsScreen。

【问题讨论】:

    标签: android android-jetpack-compose


    【解决方案1】:

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

    【讨论】:

    • 谢谢:) 我会这样尝试并告诉你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多