StateFlow
Android データ バインディングで使用したい があります。フローの値として、シール型を使用します。
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 変数を介してビューに渡すときにそれを開始する方法がよくわかりません。StateFlow
Flow
StateFlow
Flow
stateIn
Flow
StateFlow
Flow
StateFlow
viewModelScope