属性委托必须有一个“getValue(Nothing?, KProperty*>)”方法

时间:2021-05-03 16:46:41

标签: android state android-jetpack-compose

我正在尝试根据用户的选择设置我的应用程序的主题。可以是深色主题或浅色主题。

我已将 viewModel 创建为:

class ThemeViewModel(application: Application) : AndroidViewModel(application) {
    private val _darkMode = MutableLiveData<Boolean>(true)
    val darkMode : LiveData<Boolean>
        get() = _darkMode


    fun setDarkMode(isDarkMode:Boolean){
        _darkMode.value = isDarkMode
    }

    fun getDarkMode():Boolean = _darkMode.value!!

}

我已将我的主题创建为:

@Composable
fun VoodleeTheme(
    darkTheme: Boolean,
    content: @Composable () -> Unit
) {
    MaterialTheme(
        colors = if (darkTheme) DarkColors else LightColors,
        content = content
    )

}

我使用 setContent 作为:

setContent {
  MyApp {
    val doDark: Boolean by 
    themeViewModel.darkMode.observeAsState(Boolean) //this line gives error

    VoodleeTheme(darkTheme = doDark) {
    ProgressNavigation(themeViewModel)
        }
    }
}

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

添加,

import androidx.compose.runtime.getValue

这是 MutableState<T> 的扩展函数,它实现了在 by 中使用 val 的要求。

答案 1 :(得分:0)

使用以下方法解决:

 val doDark: State<Boolean> = themeViewModel.darkMode.observeAsState(initial = false)

代替:

val doDark: Boolean by themeViewModel.darkMode.observeAsState(Boolean)