我已将我的应用程序从 using 切换SharedPreferences
到PreferencesDataStore
. 我还在我的应用程序中实现了暗模式和几个主题。对于主题,我基本上在每个活动中都依赖此代码:
val themePreferences = getSharedPreferences("THEME_PREFERENCES", MODE_PRIVATE)
val settingsPreferences = getSharedPreferences("SETTINGS_PREFERENCES", MODE_PRIVATE)
darkMode = settingsPreferences.getBoolean("darkMode", false)
setTheme(when (darkMode) {
true -> themePreferences.getInt("themeDark", R.style.AppThemeDark)
false -> themePreferences.getInt("themeLight", R.style.AppThemeLight)
})
选定的主题被存储为一个整数,每个主题用于浅色模式和深色模式。现在,我也想采用我的代码的这一部分。我从我的 dataStore 存储库中获取了 darkMode 布尔值,如下所示:
viewModel.storedDarkMode.observe(this) { darkMode = it }
如果我在 LiveData 对象的 observe(this) { ... } 内工作,它将无法工作。
现在,如何将上面显示的代码片段更改为PreferencesDataStore
?或者实际上是否更好,例如创建一个单独的类以便从那里观察值?如果是的话,那样的东西怎么可能呢?或者你知道一些遵循 Android 架构的很好的示例代码,包括我可以查看的带有暗模式的自定义主题吗?
我仍在学习很多东西,非常感谢任何有助于更好地理解这一点的帮助!
最好的问候,马库斯
编辑:
runBlocking {
val darkMode = viewModel.darkModeFlow.first()
setTheme(when (darkMode) {
true -> viewModel.themeDarkFlow.first()
false -> viewModel.themeLightFlow.first()
})
}