2

StateFlowAndroid データ バインディングで使用したい があります。フローの値として、シール型を使用します。

data class State(
    val idState: IdState
) : UiState

sealed class IdState {
    object NotAssigned : IdState()
    data class Assigned(val id: Id) : IdState()
}

@JvmInline
value class Id(val value: String)

次のようにビューで使用したい:

  <com.google.android.material.textfield.TextInputLayout
            ...
            android:hint="@string/provide_client_id"
            android:text="@{viewModel.idText}">

したがって、ビューモデルには次のものがあります。

// uiState can be StateFlow or MutableStateFlow of UiState
val idText = uiState.map { state ->
    when (val idState = state.idState) {
        is UserIdState.Assigned -> idState.id.value
        UserIdState.NotAssigned -> "Not set"
    }
}

アプリケーションを起動すると問題が発生します。

Cannot find a setter for <com.google.android.material.textfield.TextInputLayout android:text> that accepts parameter type 'kotlinx.coroutines.flow.Flow<java.lang.String>'

もちろん問題は、Android データ バインディングで使用できない型にmap変更する oparator にあります。に変換せずに値をマップする方法はありますか? の演算子があることは知っていますが、それがインデントされているかどうか ( -> -> ) と、ViewModel 変数を介してビューに渡すときにそれを開始する方法がよくわかりません。StateFlowFlowStateFlowFlowstateInFlowStateFlowFlowStateFlowviewModelScope

4

0 に答える 0