android - 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 中找到。
解决方案
即使使用深度调用堆栈,更新/观察状态值也应该有效,如果我正确理解您的问题,您应该在您setTheme
的 rememberUpdatedState()
内部包装SettingsScreen
并访问/提升这个更新的值
推荐阅读
- python - scrapy+selenium 完成后如何抓取不同的页面列表?
- java - 如何在签名和证书部分删除 XML 数字签名中奇怪的行尾?
- python - 无法从 Windows 访问在 8000 上运行的 Django 应用程序
- swift - 在任何情况下都需要调用 `disposed(by:)` 吗?
- python - PermissionError:[Errno 13] 使用带有 pip-20.0.2-py2.py3-none-any.whl 轮文件的 virtualenv 和 virtualenvwrapper 的权限被拒绝
- python - 如何从 pcap 文件中提取所有数据包的 TCP 标头?
- r - 添加一个单独的 index.html 作为主页并将 shinyapp 路由到其他页面
- android - 如何在android中每2秒解析一次来自OBD II模拟器的数据
- python - 具有相同顶级名称的不同python包
- java - 打印从 1 到用户给出的数字的整数