【发布时间】:2021-07-18 21:12:44
【问题描述】:
我已经使用 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,然后在onCreate 中使用GlobalScope 来获取preference datastore,在喷气背包组合中更改这样的主题似乎不是最佳做法.
我的问题是,使用 jetPack Compose 中的应用程序类获取存储值和更改主题的首选方式是什么。
【问题讨论】:
标签: android kotlin coroutine android-jetpack preferences