【问题标题】:Property delegate must have a 'getValue(Nothing?, KProperty*>)' method属性委托必须有一个 'getValue(Nothing?, KProperty*>)' 方法
【发布时间】:2021-05-03 16:46:41
【问题描述】:

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

我已将 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)
        }
    }
}

请帮我解决这个问题。

【问题讨论】:

    标签: android state android-jetpack-compose


    【解决方案1】:

    添加,

    import androidx.compose.runtime.getValue
    

    这是MutableState&lt;T&gt; 的扩展函数,它实现了在val 中使用by 的要求。

    【讨论】:

    • 我已经导入了。但它表明这个导入是未使用的。
    • 如果这修复了编译器错误,则 IDE 错误地报告此导入未使用。
    【解决方案2】:

    通过使用解决它:

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

    代替:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多