Validere inndata
Kontroller inndata og vis nyttige feilmeldinger.
Validere inndata er en gratis leksjon i Android Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Android Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Android Academy inneholder totalt 4 leksjoner.
Hvorfor validere input
Brukere gjør feil: et tomt navn, en ugyldig e-postadresse eller et for kort passord. Gode skjemaer oppdager dette tidlig og forklarer tydelig hva som må rettes.
I denne leksjonen skal De legge til validering i Compose-skjemaer, vise innebygde feilmeldinger og deaktivere send-knappen til alt er gyldig.
En valideringsregel er bare en funksjon
Hold valideringslogikken som vanlige Kotlin-funksjoner som tar imot en verdi og returnerer om den er gyldig (eller en feilmelding). Da blir reglene gjenbrukbare og enkle å teste.
Her er en enkel kontroll av e-postadresse.
fun emailError(email: String): String? = when {
email.isBlank() -> "Email is required"
!email.contains("@") -> "Enter a valid email"
else -> null
}Vise feilen på feltet
OutlinedTextField har et isError-flagg og en supportingText-slot. Kombiner dem for å vise et rødt felt med en melding under.
Feilen kommer direkte fra valideringsfunksjonen.
var email by remember { mutableStateOf("") }
val error = emailError(email)
OutlinedTextField(
value = email,
onValueChange = { email = it },
label = { Text("Email") },
isError = error != null,
supportingText = { if (error != null) Text(error) }
)Ikke varsle for tidlig
Det føles lite brukervennlig å vise «E-postadresse er påkrevd» før brukeren i det hele tatt har tatt i feltet. En vanlig løsning er å spore om et felt har blitt berørt, og først vise feil etter dette.
Her merker vi feltet som berørt når det mister fokus.
var email by remember { mutableStateOf("") }
var touched by remember { mutableStateOf(false) }
val error = if (touched) emailError(email) else null
OutlinedTextField(
value = email,
onValueChange = { email = it },
label = { Text("Email") },
isError = error != null,
modifier = Modifier.onFocusChanged {
if (!it.isFocused) touched = true
}
)Validere et passord
Passord har vanligvis flere regler. Returner den første regelen som ikke blir oppfylt, slik at brukeren kan rette én ting om gangen.
Legg merke til at dette fortsatt er en ren funksjon uten UI.
fun passwordError(pw: String): String? = when {
pw.length < 8 -> "At least 8 characters"
pw.none { it.isDigit() } -> "Add a number"
pw.none { it.isUpperCase() } -> "Add an uppercase letter"
else -> null
}Validering på tvers av felt
Noen regler involverer to felt, for eksempel at «bekreft passord» må samsvare med passordet. Slike regler kan ikke ligge i en funksjon for ett enkelt felt, så beregn dem der begge verdiene er tilgjengelige.
var password by remember { mutableStateOf("") }
var confirm by remember { mutableStateOf("") }
val confirmError =
if (confirm.isNotEmpty() && confirm != password)
"Passwords don't match"
else nullDeaktivere innsending til skjemaet er gyldig
Hele skjemaet er gyldig når alle reglene er oppfylt. Beregn én enkelt boolsk verdi og bruk den til å aktivere eller deaktivere send-knappen.
Da hindrer De brukeren i å sende inn ugyldige data i utgangspunktet.
val formValid =
emailError(email) == null &&
passwordError(password) == null &&
confirmError == null
Button(onClick = { submit() }, enabled = formValid) {
Text("Create Account")
}Validere ved innsending
Innebygd validering veileder brukeren, men De bør også kontrollere alt på nytt når brukeren trykker på send. Håndtereren for innsending avgjør om prosessen skal fortsette, eller om alle feil skal vises samtidig.
fun onSubmit() {
val errors = listOfNotNull(
emailError(email),
passwordError(password)
)
if (errors.isEmpty()) {
register(email, password)
} else {
// show errors / mark fields touched
}
}Begrense hva som kan skrives
Validering kan også være forebyggende. For et telefonnummer kan De ganske enkelt ignorere tegn som ikke er sifre inne i onValueChange, slik at ugyldig input aldri kommer inn i tilstanden.
Dette er mer brukervennlig enn å irettesette brukeren etterpå.
var phone by remember { mutableStateOf("") }
OutlinedTextField(
value = phone,
onValueChange = { input ->
phone = input.filter { it.isDigit() }.take(10)
},
label = { Text("Phone") }
)Samle valideringen i ViewModel-en
På faktiske skjermer bør De holde valideringen i ViewModel-en, slik at UI-et bare viser resultatene. ViewModel-en eksponerer feil og et isValid-flagg.
Da forblir de komponerbare funksjonene enkle, og reglene kan enhetstestes.
class SignUpViewModel : ViewModel() {
var email by mutableStateOf("")
private set
val emailError: String?
get() = emailError(email)
val isValid: Boolean
get() = emailError == null && email.isNotBlank()
fun onEmailChange(value: String) { email = value }
}Ren Kotlin: teste reglene
Siden validatorene er rene funksjoner, kan De kjøre dem hvor som helst. Her kjøres e-post- og passordreglene frittstående, akkurat slik en enhetstest ville kalt dem.
fun emailError(email: String): String? = when {
email.isBlank() -> "Email is required"
!email.contains("@") -> "Enter a valid email"
else -> null
}
fun main() {
println(emailError(""))
println(emailError("nope"))
println(emailError("ada@dev.io"))
}Kort kontroll
Hvilket egenskapspar på OutlinedTextField brukes til å markere et felt som ugyldig og vise en melding under det?
Oppsummering
De kan nå validere Compose-skjemaer på en ryddig måte:
- Hold reglene som rene funksjoner som returnerer en feilmelding eller null.
- Vis feil med
isError+supportingText, og unngå å varsle før et felt er berørt. - Håndter regler på tvers av felt der begge verdiene er tilgjengelige.
- Deaktiver innsending til hele skjemaet er gyldig, og kontroller på nytt ved innsending.
- Forhindre ugyldig input med
filter, og samle reglene i en ViewModel.
Neste: tastaturtyper, IME-handlinger og fokushåndtering.
Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 36
- Leksjoner
- 152
Ofte stilte spørsmål
Er leksjonen «Validere inndata» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Android Academy, inkludert «Validere inndata», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Android Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Validere inndata»?
Kontroller inndata og vis nyttige feilmeldinger. Du øver på Android Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Android Academy?
Ingen tidligere erfaring er nødvendig. Android Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Validere inndata»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Android Academy-leksjonen?
Ja. Alle Android Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.