gpt4 book ai didi

android - 如何在 JetPack Compose Android 的应用程序类中使用首选项数据存储来更改主题?

转载 作者:行者123 更新时间:2023-12-04 12:00:10 28 4
gpt4 key购买 nike

我已经使用 jetpack compose 为我的 android 应用程序设置了主题。我已经在 Application 类( TranslateApplication )中声明了我的变量

val isDark = mutableStateOf(false)
我在 MainActivity.kt 中使用这个值如
  setContent {

JetnewsTheme(darkTheme = translateApplication.isDark.value) { ......
现在我想得到 isDark使用首选项数据存储,我定义了以下代码。
@HiltAndroidApp
class TranslateApplication: Application(){
val android.content.Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = Constants.SETTINGS)

val isDark = mutableStateOf(false)


override fun onCreate() {
super.onCreate()
GlobalScope.launch {
read()
}
}

suspend fun read() {
val dataStoreKey = booleanPreferencesKey(Constants.THEME)
val preferences = dataStore.data.first()

isDark.value = preferences[dataStoreKey] ?: false
}
}
首先,我将值分配给 isDark然后使用 GlobalScopeonCreate获取 preference datastore并且在喷气背包组合中像这样更改主题似乎不是最佳实践。
我的问题是,在 jetPack Compose 中使用 Application Class 获取存储值和更改主题的首选方式是什么。

最佳答案

编辑 :2021 年 8 月,使用 compose 1.0.1 进行测试
要获得按钮/开关来更改主题并将其作为设置持久化,您可以使用 Jetpack DataStore (推荐)或 SharedPreferences ,在 MainActivity 中获取您的主题状态并将其传递给您的主题组合,以及您想要修改它的任何地方。
您可以通过 SharedPreferences 找到完整的工作示例。在此 GitHub repo .
此示例使用 SingletonHilt对于依赖项,并且对您要存储的所有首选项都有效。

关于android - 如何在 JetPack Compose Android 的应用程序类中使用首选项数据存储来更改主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67250658/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com