package com.example.weterynarz import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.* // remember, mutableStateOf import androidx.compose.foundation.lazy.LazyColumn // lista import androidx.compose.foundation.lazy.items // lista items import androidx.compose.foundation.clickable // lista click import androidx.compose.foundation.layout.Row import androidx.compose.material3.Button import androidx.compose.material3.Slider import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.example.weterynarz.ui.theme.WeterynarzTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //enableEdgeToEdge() setContent { WeterynarzTheme { Wizyta() } } } } @Composable fun Wizyta() { var imieNazwisko by remember { mutableStateOf("") } // imię i nazwisko val zwierzeta = listOf("Pies", "Kot", "Swinka morska") // elementy listy var wybraneZwierze by remember { mutableStateOf("") } // wybrane zwierzę var sliderMax by remember { mutableStateOf(20f) } // max wartość slidera var sliderWartosc by remember { mutableStateOf(0f) } // wartość slidera (slider value wymaga float) var celWizyty by remember { mutableStateOf("") } // cel wizyty var godzinaWizyty by remember { mutableStateOf("16:00") } // wpisany czas var isValid by remember { mutableStateOf(true) } // błąd wpisanego czasu var info by remember { mutableStateOf("") } // informacja końcowa val timeRegex = Regex("^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$") // Wyrażenie regularne dla formatu 24-godzinnego Column ( modifier = Modifier .background(Color(0xFF90EE90)) ){ Text( text = "Wizyta u weterynarza", fontSize = 24.sp, modifier = Modifier .background(Color(0xFF2E8B57)) .fillMaxWidth() .padding(10.dp) ) TextField( value = imieNazwisko, onValueChange = { imieNazwisko = it }, label = { Text("Imię i nazwisko właściciela...") }, modifier = Modifier .background(Color(0xFF90EE90)) //.background(Color.Red, shape = RoundedCornerShape(8.dp)) .fillMaxWidth() ) Text( text = "Gatunek" ) LazyColumn() { items(zwierzeta) { item -> Text( text = item, modifier = Modifier .clickable { wybraneZwierze = item sliderWartosc = 0f // reset slidera if (item=="Pies"){ sliderMax = 18f }else if (item=="Kot"){ sliderMax = 20f }else{ sliderMax = 9f } } ) } } Row{ Text("Ile ma lat?") Text("${sliderWartosc.toInt()}") // konwersja z float to int Slider( value = sliderWartosc, onValueChange = { sliderWartosc = it }, valueRange = 0f..sliderMax ) } TextField( value = celWizyty, onValueChange = { celWizyty = it }, label = { Text("Cel wizyty...") }, modifier = Modifier .fillMaxWidth() .background(Color(0xFF90EE90)) ) TextField( value = godzinaWizyty, onValueChange = { newTime -> godzinaWizyty = newTime isValid = timeRegex.matches(newTime) // walidacja wpisywanego czasu }, //label = { Text("Wprowadź czas (24h)") }, isError = !isValid, // jeśli isError == true label jest czerwony textStyle = TextStyle(color = if (!isValid) Color.Red else Color.Black), modifier = Modifier .fillMaxWidth() ) Button(onClick = { info = "${imieNazwisko}, ${wybraneZwierze}, ${sliderWartosc.toInt()}, ${celWizyty}, ${godzinaWizyty}" }) { Text("OK") } Text( text= if(isValid) info else "wprowadź czas we właściwym formacie" ) } } @Preview(showBackground = true) @Composable fun GreetingPreview() { WeterynarzTheme { Wizyta() } }