Динамический ввод текста не запускает рекомпозицию
Я пытаюсь создать пользовательскую форму, используя компоновку реактивного ранца.
Что я сделал до сих пор на экране:
@Composable
fun FormContent(
viewModel: FormViewModel,
customFieldList: List<String>,
valuesCustomFieldsList: List<String>
) {
Column(Modifier.fillMaxWidth()) {
Column(
modifier = Modifier
.verticalScroll(rememberScrollState())
.weight(1f)
.padding(top = 8.dp, bottom = 8.dp)
) {
if (customFieldList.isNotEmpty()) {
customFieldList.forEachIndexed { index, item ->
TextRow(
title = item,
placeholder = "Insert $item",
value = valuesCustomFieldsList[index],
onValueChange = {
viewModel.onCustomFieldChange(index, it)
},
isError = false
)
}
}
}
}
Где customFieldList - это список текстовых полей, которые я хочу, а значенияCustomFieldsList - это
val valuesCustomFields by viewModel.values.collectAsState()
В моем viewModel код выглядит следующим образом:
private val _values = MutableStateFlow(emptyList<String>())
val values : StateFlow<List<String>>
get() = _values
private var customFieldValues = mutableListOf<String>()
init {
viewModelScope.launch {
//get all custom fields
customFields = gmeRepository.getCustomField()
if (customFields.isNotEmpty()) {
//init the customFieldsValues
for (i in 0..customFields.size) {
customFieldValues.add("")
}
_values.value = customFieldValues
}
}
}
fun onCustomFieldChange(index : Int, value: String) {
customFieldValues[index] = value
_values.value = customFieldValues
}
Здесь происходит следующее: если я пытаюсь изменить значение внутри inputText, onCustomFieldChange правильно запускается с первой буквой, которую я написал внутри, но тогда в пользовательском интерфейсе не видно никаких изменений. Если я попытаюсь изменить другое статическое поле внутри формы, то будет показан только последний символ, который я написал в своих настраиваемых полях, потому что запускается рекомпозиция.
Могу ли я что-то сделать для достижения своей цели?