fix(thema): een selectievakje toonde zijn stand niet in donkere modus (#744) #749
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!749
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/primary-donker-b-744"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Route B uit #744, na route A in #746. Hiermee is het issue af.
Wat er mis was
Route A repareerde tekst. Bij het narekenen bleek er iets ergers onder te
zitten: een onleesbare tekst is vervelend, maar een bediening die zijn eigen
stand niet toont is onbruikbaar.
Gemeten in het profiel Donker, vóór deze wijziging:
primary#111827opsurface#1E293BonPrimary#122F60opprimary#111827cursorColorcolorScheme.primaryDe vulling van een aangevinkt vakje was
#111827, met het vinkje erop in#122F60. Dat vinkje verdween in zijn eigen vulling: je kon een aangevinktvakje niet van een leeg vakje onderscheiden. En omdat er nergens een
TextSelectionThemeDatastond, nam FluttercolorScheme.primaryvoor detekstcursor —
#111827op een invoerveld van#1E293B. In een programmawaarin je schrijft, wist je niet waar je typte.
Waarom het niet "geef het profiel een lichte primaryColor" was
Omdat
primarytwee onverenigbare rollen droeg.profile.primaryColoris de merk- en balkkleur:appBarThemeschildert debovenbalk ermee, en in een donker profiel hoort die donker te zijn. Material
behandelt
ColorScheme.primarytegelijk als het accent voor interactieveonderdelen, waar het in donkere modus juist licht moet zijn. Eén waarde kan
niet allebei, en de voor de hand liggende reparatie lost het niet op maar
verplaatst het: een lichte
primaryColorgeeft een lichte bovenbalk.De rollen zijn nu gescheiden. In donkere modus volgt
ColorScheme.primaryhetaccent dat het profiel al heeft (
accentColor,#60A5FA— dat de focusrand ende primaire knop ook al gebruikten); de balk houdt de merkkleur. De kiem van het
schema blijft óók de merkkleur, zodat de rest van de harmonie (containers,
outlines,
onPrimary) niet verschuift.Na afloop:
primaryopsurfaceonPrimaryopprimarycursorColor#60A5FA, explicietBeide lichte profielen komen er byte-identiek uit —
primary,onPrimary,appBar, alles. De cursorkleur is daar nu expliciet, met dezelfde waarde dieFlutter er impliciet al pakte.
De regressietest
Drie toetsen erbij, per ingebouwd profiel:
(WCAG 1.4.11 — het is een grafisch object, geen tekst);
expliciete cursorkleur (anders valt Flutter terug op
primary).En een vierde die de verkeerde uitweg dichthoudt: de bovenbalk moet de merkkleur
van het profiel houden met een leesbare titel erop. Wie dit later "oplost"
door het profiel een lichte
primaryColorte geven, laat die toets vallen inplaats van het oog.
Alle drie de mutaties rood gezien:
interactiveterug opprimarytextSelectionThemeweghalenprimaryColorMet eigen ogen
flutter run -d macosin donkere modus: de aan-schakelaar is nu een lichte baanmet donkere duim (hetzelfde
primary/onPrimary-paar dat het vinkje tekent),de focusrand van het zoekveld staat er, en een tekstselectie is een zichtbare
blauwe markering in plaats van bijna-zwart op donker.
Poorten
make checkexit 0,make check-secrets0,make sast0 bevindingen. DAST nietgedraaid — advisory, geen geserveerd oppervlak geraakt. Geen nieuwe
l10n.d('…'),geen afhankelijkheid, geen SBOM-gevolg. CHANGELOG en
docs/ACCESSIBILITY.mdbij.Eén ding dat blijft staan
Dit dekt de drie ingebouwde profielen. Wie zelf een donker profiel maakt met
een donkere
accentColorkrijgt hetzelfde probleem terug. Ik heb er bewust geenstille correctie op gezet: een kleur die de gebruiker kiest en die de app dan
negeert, is een ander soort verrassing. Als dat moet worden opgevangen hoort het
in de profielbewerker zichtbaar te gebeuren — een waarschuwing zoals de
diakwaliteitscontrole die voor het dek van de gebruiker al geeft. Aparte
afweging, geen onderdeel van deze reparatie.