Динамический ввод текста не запускает рекомпозицию

Я пытаюсь создать пользовательскую форму, используя компоновку реактивного ранца.

Что я сделал до сих пор на экране:

      @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 правильно запускается с первой буквой, которую я написал внутри, но тогда в пользовательском интерфейсе не видно никаких изменений. Если я попытаюсь изменить другое статическое поле внутри формы, то будет показан только последний символ, который я написал в своих настраиваемых полях, потому что запускается рекомпозиция.

Могу ли я что-то сделать для достижения своей цели?

0 ответов

Другие вопросы по тегам