@trickster2019

Как передать mutableStateOf в функцию?

Добрый день, решил вывести все поля ввода данные в отдельный виджет, но столкнулся с проблемой.
Основной экран
@Composable
fun AddNoteScreen() {
    var NameNote by remember{
        mutableStateOf("")
    }
    var DescriptionNote by remember {
        mutableStateOf("")
    }

    Column(
        modifier= Modifier
            .fillMaxSize()
            .background(bac),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        MainOutlinedTextField(NameNote)
    }
}

Виджет
@Composable
fun MainOutlinedTextField(valueUser:String){
    OutlinedTextField(
        value = valueUser,
        onValueChange ={newText->
            valueUser=newText
        },
        colors = TextFieldDefaults.outlinedTextFieldColors(
            textColor = Color.White,
            unfocusedBorderColor = main_blue,
            focusedBorderColor = faded_blue
        ),
        label = {
            Text(
                text = "Имя заметки",
                color = faded_blue,
                fontSize = 10.sp
            )
        },
        leadingIcon = {
            IconButton(onClick = {  }) {
                Icon(
                    imageVector = Icons.Filled.Edit,
                    contentDescription = null,
                    tint = faded_blue
                )
            }
        },
        singleLine = true,
        keyboardOptions = KeyboardOptions(
            keyboardType = KeyboardType.Ascii,
            imeAction = ImeAction.Go
        ),
    )
}

Но тут появилась ошибка, мол valueUser не изменяемая переменная и так не пойдёт.
Потом я переделал функция под State, и ошибка в виджете исчезла.
@Composable
fun MainOutlinedTextField(valueUser:State<String>){
    var uv=valueUser.value
    OutlinedTextField(
        value = uv,
        onValueChange ={newText->
            uv=newText
        },
        colors = TextFieldDefaults.outlinedTextFieldColors(
            textColor = Color.White,
            unfocusedBorderColor = main_blue,
            focusedBorderColor = faded_blue
        ),
        label = {
            Text(
                text = "Имя заметки",
                color = faded_blue,
                fontSize = 10.sp
            )
        },
        leadingIcon = {
            IconButton(onClick = {  }) {
                Icon(
                    imageVector = Icons.Filled.Edit,
                    contentDescription = null,
                    tint = faded_blue
                )
            }
        },
        singleLine = true,
        keyboardOptions = KeyboardOptions(
            keyboardType = KeyboardType.Ascii,
            imeAction = ImeAction.Go
        ),
    )
}

Но появилась ошибка в основном экране
Type mismatch.
    Required:
    State<String>
    Found:
    String

Я попытался переделать переменную
var NameNote = mutableStateOf("")
Но всё равно нечего не вышло.
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
@LukyanovPA
Android Developer
У вас в MainOutlinedTextField передается в аргументы функции valueUser:String, и вы пытаетесь ей присвоить значение в onValueChange ={newText->
valueUser=newText
}
Конечно такое не будет работать.
Либо создавайте переменную by remember внутри MainOutlinedTextField и в нее пишите значение при вводе текста, либо добавьте в аргументы лямбду onResult: (String) -> Unit и возвращайте значение на экран выше
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы