我正在使用Compose for Desktop为我的桌面应用程序设计一个 GUI 。如果应用程序关闭并重新打开,一些 GUI 组件需要保留 — 一些 GUI 组件还需要根据某些状态进行更改。为此,我使用了一个简单的java.util.Properties
对象来存储信息(我已经扩展Properties
为在调用时将其内容存储到文件setProperty
中)。
例如,我希望在更改语言环境时更新 GUI 组件。当用户更改语言环境时,我设置了该属性,类似于:
launcherState = Properties() // This is being initialized before the launcher is rendered
...
launcherState.setProperty("locale", "en")
然后我想要一个ResourceBundle
——由一个状态定义的——更新。我尝试过这样的事情:
val locale by remember { derivedStateOf { launcherState.getProperty("locale") } }
val i18n by remember {
derivedStateOf {
ResourceBundle.getBundle("i18n.launcher", Locale.forLanguageTag(locale))
}
}
GUI 的文本元素使用i18n
对象来获取它们的字符串。
但是,如果我调用launcherState.setProperty("locale", "fr")
,locale
并且i18n
不更新(因此 GUI 不会更新)——我相信他们无论如何都不应该这样做。
所以我的问题是,我怎样才能使launcherState
“可观察”,以便当我对其进行更改时,状态会更新?或者,我应该采取完全不同的方法。