Fix: Jetpack Compose ObserveAsState Type Error keine Methode

Mit Jetpack Compose, einer neuen Technologie, gibt es Unebenheiten und Unebenheiten, insbesondere im Werkzeugbau. Dieser kurze Blogbeitrag hilft Ihnen, den Fehler „Type state has no method getValue“ zu beheben, wenn Sie zum ersten Mal den Status Ihres ViewModel beobachten.

Wenn Sie dem Beispielcode in folgen offizielle Dokumentation für den ViewModel-Zustandkönnen Sie Code wie diesen erstellen:

class HelloViewModel : ViewModel() {
    private val _name = MutableLiveData("")
    val name: LiveData<String> = _name
}

@Composable
fun HelloScreen(helloViewModel: HelloViewModel = viewModel()) {
    // name is the current value of [helloViewModel.name]
    // with an initial value of ""
    val name: String by helloViewModel.name.observeAsState("")
    // etc
}

Der erste Fehler, den Sie erhalten, enthält fehlende Abhängigkeiten, die leicht behoben werden können, indem Sie sie hinzufügen (Bitte stellen Sie sicher, dass Sie die neuesten Versionen verwenden, dieses Snippet wird veraltet sein):

implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02"

Aber dann passiert der verwirrendste Fehler:

Geben Sie ‘State’ ohne die Methode ‘getValue (None ?, KProperty<*>) „und wird daher nicht als Delegierter fungieren

Es ist nie eine klare Lösung (und danke Florina um es mir beizubringen!). Hier holt das Werkzeug die Codierung nicht ein. Die IDE gibt Ihnen keine schnelle Lösung.

Sie müssen die getValue-Methode importieren, um sie zu verwenden:

import androidx.compose.runtime.getValue

Ihre Importe können variieren, aber beachten Sie den hervorgehobenen blauen neuen (manuell) hinzugefügten Import für getValue:

Mao na! Die roten Schnörkel zum Kompilieren verschwinden und Sie können mit Jetpack Compose, ViewModel und dem Beobachtungsstatus fortfahren.

Genießen!

Leave a Reply

Your email address will not be published. Required fields are marked *