DsSelect
Velger med nedtrekksliste.
Bruk
Når bør du bruke DsSelect?
- Når brukeren skal velge ett alternativ fra en forhåndsdefinert liste.
- Når listen inneholder mer enn 5 alternativer, slik at radioknapper ville ta for mye plass.
- I skjemaer der valg blant standardiserte verdier er nødvendig (f.eks. fylke, land).
Når bør du unngå DsSelect?
- Når det er færre enn 4 alternativer. Bruk radioknapper i stedet for bedre oversikt.
- Når brukeren skal kunne skrive inn egne verdier. Bruk et tekstfelt med autofullfør i stedet.
Eksempler
Grunnleggende bruk
dart
DsSelect<String>(
options: const [
DsSelectOption(value: 'oslo', label: 'Oslo'),
DsSelectOption(value: 'vestland', label: 'Vestland'),
DsSelectOption(value: 'trondelag', label: 'Trøndelag'),
],
value: valgtFylke,
placeholder: 'Velg fylke',
onChanged: (verdi) => setState(() => valgtFylke = verdi),
)Med feilmelding
dart
DsSelect<String>(
options: const [
DsSelectOption(value: 'administrator', label: 'Administrator'),
DsSelectOption(value: 'bruker', label: 'Bruker'),
DsSelectOption(value: 'gjest', label: 'Gjest'),
],
value: null,
placeholder: 'Velg rolle',
error: 'Du må velge en rolle.',
onChanged: (verdi) => setState(() => valgtRolle = verdi),
)Med grupperte alternativer
dart
DsSelect<String>(
options: const [],
groups: const [
DsSelectOptgroup(
label: 'Norge',
options: [
DsSelectOption(value: 'oslo', label: 'Oslo'),
DsSelectOption(value: 'bergen', label: 'Bergen'),
],
),
],
value: valgtBy,
placeholder: 'Velg by',
onChanged: (verdi) => setState(() => valgtBy = verdi),
)Retningslinjer
- Beskriv alltid hva brukeren skal velge, enten via
placeholdereller en synlig ledetekst over velgeren, og settsemanticsLabelslik at skjermlesere annonserer feltet. - Sorter alternativene i en logisk rekkefølge (f.eks. alfabetisk eller etter relevans).
errormarkerer feiltilstanden med rød kantlinje, men viser ingen feiltekst. Vis en egen, synlig feilmelding under velgeren når valideringen feiler.
Tekst
- Plassholderteksten bør være kort og beskrivende (f.eks. «Velg fylke»).
- Alternativtekstene (
label) bør være fullstendige og entydige.
Har du innspill til denne komponenten? Send innspill på GitHub