fix(thema): tekstknoppen en links waren onleesbaar in donkere modus (#744) #746
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!746
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/tekstknoppen-donker-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 A uit #744. Het issue blijft open voor route B — zie onderaan.
Gevonden bij het naloopen van het toestemmingsscherm in donkere modus, na #735.
De fout
Material geeft een
TextButtonstandaardcolorScheme.primaryals voorgrond. Inhet profiel Donker is
primaryde merkkleur#111827, en op het eigenoppervlak
#1E293Bis dat 1,21 : 1. Ter vergelijking: in het lichte profielstaat dezelfde rol op 14,13 : 1. WCAG AA vraagt 4,5.
Dat trof élke tekstknop en élke link in de app. Het pijnlijkst op het
toestemmingsscherm: de twee routes naar de licentietekst ("Lees de volledige
licentie", "Volledige licentie online") waren donkere vlekken. Dat is het eerste
scherm dat iemand moet passeren, en het legt een licentie voor waarvan de weg
naar de tekst onzichtbaar is.
Het was half bekend.
app_theme.darthad de constatering al staan:Maar er was geen
textButtonTheme. Dáárom was in "Over OciDeck" de omlijnde knop"Alle licentieteksten tonen" leesbaar en de link "Website van de stichting"
ernaast niet — twee regels uit elkaar, hetzelfde paneel.
Wat er is gebeurd
Dezelfde regel op
textButtonTheme. Geen nieuwe afweging; een bestaandebeslissing die één knopsoort oversloeg.
AppPalette.accentInkvoor de zes plekken diecolorScheme.primaryrechtstreeks als inkt namen: de links, opsommingstekens en citaatbalk van de
documentatielezer, de sectie-iconen van het toestemmingsscherm, en het wolkje bij
een op afstand opgehaald bestand.
secondarywas de voor de hand liggende keuze en is fout: in het profielEuropa is het accent EU-geel, en dat is op het witte oppervlak van dat profiel
net zo onleesbaar als het probleem dat hier wordt opgelost.
accentInkvolgtdaarom dezelfde modusregel als de knoppen.
AppPalette.of(theme)vervangt het hardeextension<AppPalette>()!op denieuwe aanroepplekken. Dat was geen cosmetica: met de
!viel de eerstemake checkom met 86 gevallen, omdat een kaleMaterialAppin een test geenextensie draagt en een ontbrekende accentkleur zo een crash werd in plaats van
een kleur. De afgeleide terugval houdt de regel aan (lichte inkt op een donker
thema), niet de waarden.
De regressietest
test/app_theme_contrast_test.dart(#606) mat tot nu toe kleuren die iemandkoos. Deze fout zat in de kleur die
ThemeDatauitdeelt als niemand kiest —daar keek geen enkele toets. Twee toetsen erbij:
AppAppearanceProfile: de opgeloste voorgrond vantextButtonThemeenoutlinedButtonTheme, plusaccentInk, moet 4,5:1 halenop het oppervlak van dát profiel. De toets eist ook dat de voorgrond
bestaat — een ontbrekende knopstijl is precies wat hier gebeurd was.
colorScheme.primaryalscolor:van tekst of icoon.Drie mutaties, alle drie rood gezien:
textButtonThemeweghalentextButtonThemeopprimarylaten staan{TextButton: 1.2126638…}, alléén op DonkercolorScheme.primaryDie tweede is de gemeten waarde uit het issue, uit de test zelf.
Met eigen ogen
flutter run -d macosin donkere modus: toestemmingsscherm (beide licentielinksplus de sectie-iconen), openscherm ("Gebruikershandleiding", "Instellingen"), en
de documentatielezer (links, opsommingstekens, citaatbalk). Alles leest.
Om bij het toestemmingsscherm te komen heb ik lokaal
flutter.app_consent_acceptedtijdelijk op
falsegezet en daarna teruggezet optrue— de waarde staat weerzoals hij stond.
Poorten
make checkexit 0 (5.997 tests, dekking 86,6%, per-bestand-vloer 0),make check-secrets0,make sast0 bevindingen over 687 bestanden. DAST nietgedraaid — advisory, en deze wijziging raakt geen geserveerd oppervlak. Geen
nieuwe
l10n.d('…'), geen afhankelijkheid, geen SBOM-gevolg.Documentatie: CHANGELOG en
docs/ACCESSIBILITY.md— dat laatste beweerde "zevendingen" en de klasse die hier misging stond er niet in.
Wat er níét in zit (#744 blijft open)
Route B:
primaryin het profiel Donker is nog steeds#111827, en dat is óókde vulling van een selectievakje, een schakelaar, de focusring en de
tekstselectie. Die zijn nu bijna zwart. Vermoedelijk ook fout, maar dat verandert
hoe donkere modus eruitziet en verdient een eigen ronde met die gebruiken erbij —
niet meeliften op een contrastreparatie.