Android Jetpack Compose: TextField – Ни одна из функций не может быть вызвана с предоставленными аргументами.

Вопрос или проблема

Я использую Jetpack Compose в Kotlin, и я столкнулся с интересной странной проблемой при работе с TextField. Согласно документации, я должен заполнить только два параметра: value и onValueChange. Но мой компилятор продолжает предупреждать меня с тем же сообщением: Ни одна из следующих функций не может быть вызвана с предоставленными аргументами.

Ниже приведена часть моего кода, где мой компилятор предупреждает меня, вместе с импортами:

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.camera.core.CameraSelector
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.view.PreviewView
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.*
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.compose.ui.window.Dialog
import androidx.core.content.ContextCompat

if(showDialog){
    Dialog(onDismissRequest = {showDialog = false}){
        var inputText:String by remember{ mutableStateOf("")}

        Column(modifier = Modifier.fillMaxSize().padding(16.dp)){
            TextField(
                value = inputText,
                onValueChange = { it:String -> inputText = it},
                label = {Text("Возраст")},
                colors = TextFieldDefaults.colors(),
            ){}
            Button(onClick = {
                if (inputText.isNotEmpty()) {
                    dataList.add(inputText)
                    showDialog = false
                }
            }){
                Text("Отправить")
            }
        }
    }
}

Существовал аналогичный вопрос, который был задан в 2021 году. Но тот вопрос касался делегированных свойств. Однако мой редактор (Intellij Idea) точно распознавал типы моих параметров, в то время как предполагал, что мне не хватает каких-то других параметров.

Позже я выяснил, что он заставил меня заполнить colors, но затем показал красный ), что я не могу понять. Я не могу добавить картинку, поэтому я выделил символы, которые должны быть красными, как жирные:

Ни одна из следующих функций не может быть вызвана с предоставленными аргументами.

  • TextField(TextFieldValue, (TextFieldValue) → Unit, Modifier = …, Boolean = …, Boolean = …, TextStyle = …, (() → Unit)? = …, (() → Unit)? = …, (() → Unit)? = …, (() → Unit)? = …, (() → Unit)? = …, (() → Unit)? = …, (() → Unit)? = …, Boolean = …, VisualTransformation = …, KeyboardOptions = …, KeyboardActions = …, Boolean = …, Int = …, Int = …, MutableInteractionSource = …, Shape = …, TextFieldColors = …) определено в androidx.compose.material3
  • TextField(String, (String) → Unit, Modifier = …, Boolean = …, Boolean = …, TextStyle = …, (() → Unit)? = …, (() → Unit)? = …, (() → Unit)? = …, (() → Unit)? = …, (() → Unit)? = …, (() → Unit)? = …, (() → Unit)? = …, Boolean = …, VisualTransformation = …, KeyboardOptions = …, KeyboardActions = …, Boolean = …, Int = …, Int = …, MutableInteractionSource = …, Shape = …, TextFieldColors = …) определено в androidx.compose.material

Существуют ли определенные способы решения аналогичных проблем?

if(showDialog){
    Dialog(onDismissRequest = {showDialog = false}){
        var inputText:String by remember{ mutableStateOf("")}

        Column(modifier = Modifier.fillMaxSize().padding(16.dp)){
            TextField(
                value = inputText,
                onValueChange = {inputText = it},
                label = {Text("Возраст")},
                colors = TextFieldDefaults.colors()
            )
            Button(onClick = {
                if (inputText.isNotEmpty()) {
                    dataList.add(inputText)
                    showDialog = false
                }
            }){
                Text("Отправить")
            }
        }
    }
}

исправил ваш код, вся проблема заключалась в {} после вашего TextField, текстовое поле не знало, какой аргумент вы пытаетесь передать, и поэтому оно подчеркивало всю конструкцию

Ответ или решение

Проблема, с которой вы столкнулись в вашем коде на Kotlin с использованием Jetpack Compose, связана с тем, что вы добавили пустые фигурные скобки {} после вызова функции TextField. Этот синтаксис вызывает путаницу у компилятора, так как он воспринимает это как попытку передать аргумент в функцию, но не знает, что именно вы хотите передать.

Решение проблемы

Вот, что вам следует изменить в вашем коде:

if(showDialog) {
    Dialog(onDismissRequest = { showDialog = false }) {
        var inputText: String by remember { mutableStateOf("") }

        Column(modifier = Modifier.fillMaxSize().padding(16.dp)) {
            TextField(
                value = inputText,
                onValueChange = { inputText = it }, // Убедитесь, что тут никаких фигурных скобок
                label = { Text("Age") },
                colors = TextFieldDefaults.colors() // Или другой дефолтный цвет или стиль
            ) // Удалите здесь фигурные скобки
            Button(onClick = {
                if (inputText.isNotEmpty()) {
                    dataList.add(inputText)
                    showDialog = false
                }
            }) {
                Text("Submit")
            }
        }
    }
}

Уточнение ошибки

Когда вы вызываете TextField, вы должны передать все необходимые параметры, и если вы добавляете {}, это интерпретируется как блок кода, что неправильно для функции TextField. Функция не ожидает дополнительных аргументов или тела (как в случае с Composable функцией), поэтому компилятор не может обработать это и выдает ошибку.

Возможные дополнительные советы

  1. Проверка зависимости: Убедитесь, что вы используете правильные версии библиотек Jetpack Compose. Иногда различия в версиях могут вызывать подобные ошибки.

  2. Обновление IDE: Иногда среда разработки может иметь баги или недопонимание, попробуйте обновить ваш IntelliJ IDEA или Android Studio до последней версии.

  3. Изучение документации: Всегда полезно проверить официальную документацию Jetpack Compose, чтобы убедиться, что вы используете функции правильно и в соответствии с последними изменениями в API.

Заключение

Проблема "None of the following functions can be called with the arguments supplied" часто возникает из-за неверного синтаксиса или передачи аргументов. В вашем конкретном случае это было вызвано использованием дополнительных фигурных скобок. Убедившись, что вы передаете правильные аргументы без лишних структур, вы избежите подобных ошибок в будущем.

Оцените материал
Добавить комментарий

Капча загружается...