Tillgänglighets-promptar för React och Flutter UI-granskningar: kopierbara prompts och enkla granskningssteg för tangentbord, fokusordning, etiketter, kontrast och skärmläsare.

De flesta tillgänglighetsproblem är inte stora redesign-frågor. Det är små detaljer som avgör om någon alls kan använda din UI.
Det som oftast går fel först är förvånansvärt konsekvent. En sida kan se bra ut, klara en snabb visuell kontroll och ändå vara svår att använda med tangentbord eller skärmläsare.
Här är de första ställen där UI brukar falla:
Det knepiga är hur lätt det är att regressa. En “liten” ändring som att byta en knapp mot en ikon, omsluta ett kort i en gesture-handler eller lägga till en anpassad dropdown kan ta bort tangentbordsstöd, bryta fokusordningen eller tappa en etikett utan att någon märker det.
Ett vanligt scenario: ett React-formulär får en ny “rensa”-ikon inne i ett inputfält. Det ser hjälpsamt ut, men ikonen är inte fokuserbar, saknar namn och stjäl klickhändelser. Nu kan tangentbordsanvändare inte aktivera den och skärmläsaranvändare hör en oetiketterad kontroll.
Det här inlägget ger dig två saker: kopierbara prompts du kan använda med din UI-kod (React och Flutter) och ett upprepbart granskningsflöde du kan köra på några minuter. Målet är inte perfektion första dagen. Det är att fånga de problem som blockerar verkliga användare.
Om du bygger produktskärmar men inte är en tillgänglighetsspecialist är detta för dig. Det passar också team som använder snabbkodningsverktyg som Koder.ai, där UI-ändringar kan ske snabbt och du behöver snabba, konsekventa kontroller. Om du vill ha en praktisk startpunkt är dessa tillgänglighets-promptar för React och Flutter UI-granskning utformade för att återanvändas varje gång du levererar UI.
Om du bara har 15 minuter att granska en skärm hittar dessa kontroller de problem som oftast blockerar folk. De fungerar för både React och Flutter, och passar väl in i tillgänglighets-promptar för React och Flutter UI-granskning.
Försök att navigera genom sidan utan mus. Använd Tab och Shift+Tab för att flytta, Enter och Space för att aktivera, och piltangenter där en widget ser ut som en meny, flikar eller en lista.
Ett snabbt tecken: om du fastnar i en modal eller inte kan nå en viktig kontroll (som “Stäng”), är något fel.
När du tabbar ska fokus följa den visuella layouten (uppifrån och ner, vänster till höger) och aldrig hoppa till dolda områden. Fokus måste också vara uppenbart. Om designen använder diskreta konturer, kontrollera att de fortfarande syns på ljusa och mörka bakgrunder.
En skärmläsare ska läsa upp ett användbart namn för varje interaktivt element. “Knapp” räcker inte. Ikoner behöver en tillgänglig etikett, och formulärfält behöver en etikett som förblir kopplad även när platshållare försvinner.
Kontrollera liten text, inaktiverad text och text på färgade knappar. Testa också zoom: öka teckenstorleken och se till att layouten inte överlappar eller skär av viktig information.
När något ändras (fel, laddning, lyckat) ska användare inte behöva gissa. Använd inline-feltext nära fältet, meddela formulärfel och gör laddningstillstånd tydliga.
Om du bygger skärmar i Koder.ai, be den att “verifiera tangentbordsflöde, fokusordning och skärmläsar-etiketter för den här sidan”, och granska sedan resultatet med stegen ovan.
Tillgänglighetsarbete går snabbare när du bestämmer vad du granskar och vad som räcker innan du rör några komponenter. En snäv omfattning gör också tillgänglighets-promptar för React och Flutter UI-granskning mer användbara, eftersom modellen kan fokusera på verkliga skärmar och verkliga interaktioner.
Börja med 2 till 4 kritiska användarresor, inte hela produkten. Bra val är de som användare måste slutföra för att få värde, och de som kan låsa ute användare om de misslyckas.
För de flesta appar är det något i stil med inloggning, ett primärt “skapa eller köpa”-flöde (checkout, bokning, skicka) och ett kontoområde som inställningar eller profil.
Skriv sedan ner de exakta skärmarna i varje resa (även om det bara är 5 till 8 skärmar). Inkludera också “mellan”-tillstånd: felmeddelanden, tomma tillstånd, laddningstillstånd och bekräftelsedialoger. Där bryts ofta fokus och skärmläsarens utdata.
Ett konkret exempel: om du bygger en liten CRM-skärm i Koder.ai, avgränsa den till “logga in -> öppna Kontakter -> lägg till kontakt -> spara -> se lyckat meddelande.” Det enda flödet täcker formulär, validering, dialoger och meddelanden.
Håll det praktiskt. Sikta mot WCAG AA-liknande förväntningar, men översätt det till enkla kontroller du kan tillämpa snabbt: tangentbord fungerar ända fram, fokus är synligt och logiskt, namn och etiketter är meningsfulla, och kontrast är läsbar.
Använd ett enkelt pass/fail-format så du inte förlorar tid på diskussioner. För varje skärm få med:
Det håller granskningen konsekvent över React och Flutter och gör det enkelt att överlämna ärenden till någon annan utan att förklara problemet igen.
När du ber om en tillgänglighetsgranskning ger snabbast resultat att vara specifik: vilken komponent, vilken användaråtgärd och vad som är “bra”. Dessa tillgänglighets-promptar för React och Flutter UI-granskning fungerar bäst när du klistrar in komponentkoden plus en kort beskrivning av vad UI ska göra.
Om du använder en chattbaserad byggare som Koder.ai, lägg prompten direkt efter att du genererat en skärm eller komponent så att problem åtgärdas innan de sprids i appen.
Review this React component for keyboard navigation issues.
- Can every interactive element be reached with Tab and activated with Enter/Space?
- List the exact problems you see in the code.
- Propose fixes with small code edits.
Check focus order and focus visibility.
- Describe the expected focus order for a keyboard-only user.
- Point out where focus could get lost (modals, menus, drawers).
- Tell me exactly where to add :focus-visible styles (which elements, which CSS).
Find missing accessible names.
- Identify inputs, buttons, and icons without clear labels.
- Suggest label + htmlFor, aria-label, aria-labelledby, or visible text.
- If there is helper/error text, connect it with aria-describedby.
Identify interactive elements that are not buttons/links.
- Find div/span with onClick, custom dropdowns, and clickable cards.
- Suggest correct semantics (button/a) or add role, tabIndex, and keyboard handlers.
List screen reader announcements that will be confusing.
- Predict what a screen reader will announce for key controls.
- Rewrite UI text to be shorter and clearer.
- Suggest aria-live usage for status changes (loading, errors, saved).
Innan du skickar en prompt, inkludera dessa detaljer så du får användbara fixar, inte generisk rådgivning:
Om du vill ha konsekventa resultat, klistra in ett widgetutdrag (eller hela skärmen) och be om specifika kontroller. Dessa tillgänglighets-promptar för React och Flutter UI-granskning fungerar bäst när du inkluderar: widgetträdet, hur skärmen nås och eventuella anpassade gester.
Review this Flutter widget tree for keyboard navigation and focus traversal.
Call out focus traps, missing focus order, and places where Tab/Shift+Tab will feel confusing.
Suggest exact widget changes (Focus, FocusTraversalGroup, Shortcuts, Actions).
Check this screen for missing Semantics labels, hints, and tap targets.
Point to the exact widgets that need Semantics(label/hint), tooltip, or exclusion.
Also flag controls under 48x48 logical pixels and suggest fixes.
Find custom gestures that break accessibility (GestureDetector/Listener).
Replace them with accessible widgets or add keyboard + semantics support.
If a gesture is required, describe how a keyboard user triggers the same action.
Audit error messages and validation on this form.
What should be announced to a screen reader, and when?
Suggest how to expose errors via Semantics and focus movement after submit.
Propose a consistent focus highlight style across screens.
It should be obvious on dark/light themes and work with keyboard navigation.
Show a small code example using FocusTheme/ThemeData.
Förvänta dig svar som nämner några konkreta mönster:
FocusTraversalGroup och sätt FocusTraversalOrder bara när det behövs.Semantics (eller MergeSemantics) för sammansatta kontroller och undvik dubbletter av etiketter.InkWell, IconButton, ListTile, SwitchListTile framför råa GestureDetector när det är möjligt.Shortcuts + Actions för icke-textinmatningar (till exempel Enter för att aktivera, Escape för att stänga).Ett minimalt exempel för att få ett anpassat kort att bete sig som en knapp:
Semantics(
button: true,
label: 'Add payment method',
hint: 'Opens the add card screen',
child: Focus(
child: InkWell(
onTap: onPressed,
child: Card(child: child),
),
),
)
En snabb tangentbords- och fokusgranskning hittar problem som också påverkar skärmläsare och switch-enheter. Gör det på ett riktigt sidsflöde (inte en enda knapp), och för anteckningar medan du går så att du kan kontrollera samma väg senare.
Börja med att välja en “happy path” en användare skulle ta, som att logga in, öppna en inställningsskärm och spara.
Håll det enkelt: sidans namn, vad du tryckte, vad som hände och vad du förväntade dig. Den lilla loggen gör det lätt att bekräfta att en React-refaktorering eller ett Flutter-widgetbyte inte tyst bröt tangentbordsåtkomst.
Skärmläsare “ser” inte din UI. De förlitar sig på namn, roller och korta meddelanden som förklarar vad som ändrats. Om namnet saknas eller är vag blir appen gissningslek.
Börja med formulärfält. Varje input behöver en riktig etikett som gäller även när fältet är ifyllt. Platshållare är hjälptext, inte etiketter, och försvinner ofta så fort användaren börjar skriva.
Ikon‑endast-åtgärder är ett annat vanligt miss. En papperskorgsikon, en penna eller en tre-punkts-meny behöver ett meningsfullt namn som matchar resultatet, inte formen. “Radera projekt” är bättre än “Knapp” eller “Papperskorg”.
Rubriker och sektionsetiketter spelar roll eftersom de blir sidans disposition. Använd rubriker för att spegla struktur, inte bara styling. En skärmläsaranvändare hoppar ofta via rubriker för att hitta “Fakturering” eller “Teammedlemmar”, så etiketterna bör matcha innehållet.
Felmeddelanden ska vara specifika och handlingsbara. “Ogiltig inmatning” räcker inte. Säg vad som gick fel och vad man ska göra härnäst, till exempel “Lösenord måste vara minst 12 tecken” eller “E-postadressen saknar @-tecken”.
Använd dessa prompts när du granskar en skärm (eller när du ber ett verktyg som Koder.ai uppdatera komponenter):
Många skärmar ändras utan omladdning: spara profil, lägga till ett objekt, ladda resultat. Se till att dessa uppdateringar annonseras.
För React, föredra ett aria-live‑område (polite för “Sparat”, assertive för kritiska fel). För Flutter, använd Semantics och gör statusmeddelanden synliga (t.ex. ett banner eller SnackBar) så att de läses upp, inte bara visas. Ett snabbt test: trigga “Spara” och bekräfta att du hör ett kort meddelande som “Ändringar sparade” utan att fokus flyttas bort från knappen.
Du kan hitta de flesta kontrast- och tydlighetsproblem på några minuter om du fokuserar på de ställen användare faktiskt har svårt: liten text, ikoner, fokusringar och statusfärger. Detta är en praktisk del av tillgänglighets-promptar för React och Flutter UI-granskning eftersom det är enkelt att verifiera och lika lätt att åtgärda.
Börja med att skanna en skärm vid 100% zoom och sedan vid 200%. Om något blir svårt att läsa är det vanligtvis ett kontrast‑, vikt‑ eller mellanrumsproblem, inte en “användarfråga”.
Kontrollera dessa fem ställen först:
En enkel tumregel: om du måste kiska, kommer dina användare att göra det också. Om du är osäker på ett färgpar, byt temporärt texten till rent svart eller rent vitt. Om läsbarheten förbättras mycket var kontrasten för låg.
Fokusets synlighet missas ofta. Se till att fokusringen är tillräckligt tjock för att märkas och inte samma färg som bakgrunden. Om du har ett “valt” tillstånd i en lista bör det se annorlunda ut även i gråskala, till exempel genom att lägga till en ikon, understrykning eller en tydlig kant.
På mobil handlar visuell tydlighet också om touch. Knappar och ikon‑endast-åtgärder bör ha generösa tryckyta och avstånd så att användare inte trycker fel.
Gör en snabb temagenomgång: växla mörkt läge och, om appen stöder det, högkontrastinställningar. Kontrollera text på ytor, avskiljare och fokusringar igen. Ett vanligt fel är en fokusring som försvinner i mörkt läge eller en “inaktiv” ikon som blir nästan samma färg som sin bakgrund.
Om du genererar UI snabbt i ett verktyg som Koder.ai, lägg till ett extra granskningssteg: be om en “kontrast- och fokusringspass” efter första layouten, innan visuella detaljer poleras.
De flesta tillgänglighetsbuggar upprepas eftersom de känns som små UI-justeringar, inte som produktbeteende. När du kör tillgänglighets-promptar för React och Flutter UI-granskning, håll utkik efter dessa mönster först.
Platshållartext är inte en etikett. En platshållare försvinner så fort någon skriver, och många skärmläsare behandlar den inte heller som fältnamn. Använd en riktig synlig etikett (eller ett uttryckligt tillgängligt namn) så fältet är begripligt när det är tomt, fyllt och när fel visas.
Fokusstilar tas bort för att de “ser fula ut.” Det gör ofta tangentbordsanvändare vilsna. Om du ändrar standardkonturen, ersätt den med något lika tydligt: en stark ring, en bakgrundsändring och tillräcklig kontrast mot sidan.
En annan återkommande syndare är fejkade knappar. I React är det frestande att använda en div med onClick och i Flutter en Container med GestureDetector. Utan korrekt semantik lider tangentbordsstöd och skärmläsare. Native-kontroller (button, a, TextButton, ElevatedButton) ger fokus, roll, inaktiverat tillstånd och aktiveringsbeteende gratis.
Dialog- och formulärfokusbuggar är subtila men smärtsamma. Efter att ha stängt en modal eller sparat ett formulär hoppar fokus ofta till toppen av sidan eller försvinner. Det händer när fokus inte återställs till kontrollen som öppnade dialogen eller när sparåtgärden renderar om skärmen och tappar fokus. Användare måste då börja om för att hitta var de var.
Överanvändning av ARIA (eller Flutter Semantics) kan också ställa till det. Att lägga till roller och etiketter överallt kan krocka med vad det inbyggda elementet redan ger, vilket leder till dubbla uppläsningar eller felaktiga namn.
En snabb “återkommande problem”-check du kan be om när du granskar en skärm:
Om du genererar UI från chat (till exempel i Koder.ai), inkludera dessa som acceptanskriterier i din prompt så första utkastet redan undviker vanliga fallgropar.
Föreställ dig en enkel Inställningar-skärm: ett profilformulär (Namn, E-post), två växlar (E-postnotifikationer, Mörkt läge), en “Spara ändringar”-knapp och en toast som visas efter sparning.
Börja med tangentbordet. Den förväntade fokusordningen bör matcha den visuella ordningen, uppifrån och ner, vänster till höger. Tabbning ska aldrig hoppa in i toast-området, footern eller en dold meny.
Ett snabbt godkänt-pass som funkar för de flesta tillgänglighets-promptar för React och Flutter UI-granskning:
Nu kontrollera vad en skärmläsare läser upp. Varje kontroll behöver ett tydligt namn, roll och tillstånd. Till exempel: “Namn, textfält, obligatoriskt” och “E-postnotifikationer, switch, på”. Om E-postfältet har ett fel ska det annonseras när fokus går in i fältet och när felet dyker upp (till exempel: “E-post, textfält, ogiltigt, Ange en giltig e-postadress”). Spara-knappen ska läsas som “Spara ändringar, knapp” och vara inaktiverad bara om du också kommunicerar varför.
För kontrast, kontrollera normal text, platshållartext och felmeddelanden. Kontrollera även fokusringen: den måste vara lätt att se mot både ljusa och mörka bakgrunder. Felstater ska inte enbart förlita sig på röd färg. Lägg till en ikon, tydlig text eller båda.
Gör dina fynd till en kort fixlista:
Om du bygger i Koder.ai, klistra in skärmbeskrivningen och dina fynd i chatten och be den uppdatera React- eller Flutter‑UI så att den matchar det förväntade tangentbords- och skärmläsarbeteendet.
Om du vill att tillgänglighets-promptar för React och Flutter UI-granskning ska löna sig på lång sikt, behandla dem som en upprepad vana, inte en engångsstädning. Målet är att köra samma lilla uppsättning kontroller varje gång du lägger till en ny skärm eller komponent.
Behåll en enda “definition of done” för UI-ändringar. Innan något skickas, gör en snabb genomgång som täcker tangentbord, fokus, namn och kontrast. Det tar bara några minuter när du gör det ofta.
Här är en snabb checklista du kan köra på nästan vilken UI som helst:
Spara dina bästa prompts som mallar. Ett enkelt sätt är att ha en “React review prompt” och en “Flutter review prompt” som du klistrar in i slutet av varje ändringsbegäran. Lägg sedan till en kort rad som beskriver den nya komponenten och eventuellt specialbeteende (modal, stegvis, lista med oändlig scroll).
Kör samma kontroller på varje ny komponent innan release, även om det känns repetitivt. Tillgänglighetsproblem införs ofta av små ändringar: en ny ikon‑endast-knapp, en anpassad dropdown, ett toast‑meddelande eller en fokusfälla i en dialog.
Om du bygger med Koder.ai, klistra in prompts i chatten och be om specifika fixar, inte generella förbättringar. Använd sedan planeringsläge för att granska påverkan innan ändringar tillämpas. Ta en snapshot före tillgänglighetsåtgärden och använd rollback om en fix bryter layout eller beteende. Det gör det säkrare att iterera på fokusordning och semantik utan rädsla.
Efter din tillgänglighetsgenomgång kan du behandla den som en release-gate: exportera källkoden för ditt repo-flöde, eller distribuera och hosta appen och koppla en egen domän när du är nöjd med resultaten.