0

After long press on OutLinedTextFIeld app is crashing.

The main need of this code is to be able to search for an item from the menu by typing something into the OutlinedTextField

I tried to change location of OutlinedTextField, but it didn't help. From another hand I tried block the possibility to long press on it. In Terminal after the crash, I had information that something cannot be null.

@Composable
fun EatList() {

    var sequenceList: MutableList<String> = mutableListOf("")
    val foodList: MutableList<String> = mutableListOf(
        "bazylia suszona ", //0
        "bułka tarta ",
        "cukier brązowy ",
        "cukier biały ",
        "cukier puder ",
        "cukier waniliowy ", //5
        "cynamon ",
        "drożdże suche ",
        "herbata ",
        "kakao ",
        "kasza jęczmienna ",//10
        "kasza manna ",
        "kasza mielona ",
        "kasza gryczana ",
        "koncentrat pomidorowy ",
        "mak ",//15
        "margaryna ",
        "majonez ",
        "masło ",
        "masło orzechowe ",
        "mąka kukurydziana ",//20
        "mąka orkiszowa 1850 ",
        "mąka pszenna ",
        "mąka pszenna pełna ",
        "mąka tortowa ",
        "mąka ziemniaczana ",//25
        "mąka żytnia ",
        "miód ",
        "mleko w proszku ",
        "ocet ",
        "olej roślinny ",//30
        "oliwa z oliwek ",
        "owies ",
        "papryka przyprawa ",
        "pietruszka przyprawa ",
        "pietruszka świeża ",//35
        "pieprz mielony ",
        "płatki kukurydziane ",
        "płatki owsiane ",
        "proszek do pieczenia ",
        "pszenica ",//40
        "skrobia kukurydziana ",
        "soda oczyszczona ",
        "sól ",
        "smalec ",
        "śmietana 12% ",//45
        "śmietana 18% ",
        "śmietana 36% ",
        "olej kokosowy ",
        "twaróg chudy ",
        "twaróg półtłusty ",//50
        "twaróg tłusty ",
        "żelatyna ",
        "żurawina ",
        //  "mleko "
    )
    var textt by remember { mutableStateOf("") }
    var currentValue by remember { mutableStateOf("Choose product") } //displays a particular string depending on what the user choose
    val expanded = remember { mutableStateOf(false) } //is responsible for opening and closing Menu

    val n = textt.length

    var i=0
if(n==0){
    sequenceList=foodList
}
    else{
        sequenceList.removeAt(0)
    while(i<53){
        if (textt == foodList[i].take(n)) {
            sequenceList.add(foodList[i])
}
        i++
    }

}

    Column(
        modifier = Modifier
            .fillMaxWidth()
            .padding(top = 140.dp)
            .padding(start = 150.dp)
        ,
        horizontalAlignment = Alignment.Start
    )
    {

        Row(modifier = Modifier
            .clip(RoundedCornerShape(10.dp))
            .clickable { expanded.value = !expanded.value }
            .background(color = Color.White, shape = RoundedCornerShape(10.dp))
            .border(
                width = 1.5.dp,
                color = Color.Black,
                shape = RoundedCornerShape(10.dp)
            )
            .padding(8.dp))
        {
            Text(
                text = currentValue,
                fontStyle = FontStyle.Italic,
                fontFamily = FontFamily.Serif,
            )
            Icon(imageVector = Icons.Filled.ArrowDropDown, contentDescription = null)
        }

        DropdownMenu(
            expanded = expanded.value,
            onDismissRequest = {
                expanded.value = false
            },
            modifier = Modifier
                .height(220.dp)
                .border(
                    width = 1.5.dp,
                    color = Color.Black,
                    shape = RoundedCornerShape(4.dp)
                )
                .width(200.dp)
        ) {

            val focusManager = LocalFocusManager.current//remove cursor when user click Done
            val maxLng2=31

            OutlinedTextField(
                modifier = Modifier
                    .border(
                        width = 1.dp,
                        color = Color.Black,
                        shape = RoundedCornerShape(4.dp)
                    )
                    .width(200.dp),
                value = textt,
                onValueChange = { newTextt ->
                    if(newTextt.length<maxLng2) {
                        textt = newTextt.toLowerCase(Locale.current)
                    }
                    textt=textt


                },
                placeholder = { Text(text = "Search") },
                keyboardOptions = KeyboardOptions(autoCorrect = true,imeAction = ImeAction.Done),
                keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
                maxLines = 1
            )


            sequenceList.forEach {

                DropdownMenuItem(
                    onClick = {
                        currentValue = it
                        expanded.value = false
                    },
                    modifier = Modifier.border(
                        width = 0.5.dp,
                        color = Color.Black,
                    )
                ) {
                    Text(
                        text = it,
                        fontStyle = FontStyle.Italic,
                        fontFamily = FontFamily.Serif,
                        fontSize = 18.sp
                    )

                }

            }
        }


    }
}
  • Where is the longPress() onClick event… in order to use long press you need some code to tell it what to do. Unless I am missing it in the code – Camp Nerd Jun 17 '23 at 11:38
  • I dont have any event for that because I dont want any action after long press. But my app is crashing after long press/click on OutllnedTextField. Now i try to add smth like that to block long press: .pointerInput(Unit){ detectTapGestures( onLongPress = {false} ) } //This is not working :(( – programmingpassionate Jun 17 '23 at 16:10

0 Answers0