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

MRa*_*iaz 6 android preferences coroutine kotlin android-jetpack

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

val isDark = mutableStateOf(false)
Run Code Online (Sandbox Code Playgroud)

我在我的MainActivity.kt诸如此类中使用此值

  setContent {

        JetnewsTheme(darkTheme = translateApplication.isDark.value) { ......
Run Code Online (Sandbox Code Playgroud)

现在我想获取isDarkusing 首选项数据存储,并且我定义了以下代码。

@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
    }
}
Run Code Online (Sandbox Code Playgroud)

首先,我将值分配给isDark 然后使用GlobalScopeinonCreate来获取preference datastore,在喷气背包组合中像这样更改主题似乎不是最佳实践。

我的问题是,在 jetPack Compose 中使用 Application Class 获取存储值和更改主题的首选方式是什么。