feat(uiterlijk): meet de leesbaarheid van een eigen app-thema (#750) #755
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!755
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/leesbaarheid-profielbewerker-750"
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?
Closes #750.
De reparaties in #744 en #746/#749 zetten toetsen op de drie ingebouwde
profielen. Uiterlijk → App-thema laat je een eigen profiel maken met acht
vrije kleuren, en daar kon je precies dezelfde fout terugbouwen — een donker
accent in een donker profiel — zonder dat iets er iets over zei.
Twee dingen, en het tweede is het belangrijkste
Een leesbaarheidsmeting onder het voorbeeld. Negen paren, met de gemeten
verhouding, de lat ernaast en de twee kleuren die vergeleken zijn als stippen
ervoor. Geen zin eromheen: label plus twee getallen leest sneller, en het
scheelt een geïnterpoleerde bronstring in 31 talen. Waarschuwen, niet
tegenhouden — het is de app van de gebruiker en de weg terug is één kleur;
blokkeren past bij een export, die de deur uit gaat.
Het voorbeeld is eerlijk gemaakt, en dat is de eigenlijke reparatie. Het
schilderde zijn eigen kleuren met een
_contrastColor()-hulpje dat zwart of witkoos op luminantie. De app doet dat niet — die gebruikt
panelTextColorvoor debaltitel en een berekende voorgrond voor de knop. Het voorbeeld liet dus een
leesbare balk zien boven een profiel dat de app onleesbaar rendert: het vleide
precies het profiel dat een waarschuwing verdiende. Het bouwt nu het échte
ThemeDataen rendert daarbinnen.En het toont sinds nu een selectievakje, een schakelaar en een tekstknop. Het
oude voorbeeld liet uitsluitend de rollen zien die in #744 goed waren (balk,
zijbalk, kaart, gevulde knop) en precies niet de rollen die stukgingen. Wie
zorgvuldig naar het voorbeeld keek voordat hij opsloeg, zag het probleem niet.
Met een accent van
#1B2537in een donker profiel verdwijnen het vinkje en deschakelaar nu zichtbaar in het voorbeeld, mét de melding eronder:
Het meet het thema, niet de velden
lib/theme/appearance_contrast.dartbouwt het profiel doorAppTheme.fromProfileen leest de opgeloste waarden. Dat is geen netheid maarde kern: vier van de negen paren bestaan niet als veld. De voorgrond van een
tekstknop, de interactiekleur, het vinkje daarop en het label van de primaire
knop worden afgeleid — en dáár zat #744. Een controle die de acht kleurkiezers
naast elkaar legt, had het profiel dat #744 veroorzaakte goedgekeurd.
Dezelfde functie voedt
test/app_theme_contrast_test.dart. Twee rekensommenover dezelfde vraag lopen uit elkaar, en dan bewaakt de toets niet meer wat het
scherm belooft.
Wat de meting meteen zelf vond
Bij de eerste run over de ingebouwde profielen: het label op de primaire knop
stond in Donker op 2,54:1. De voorgrond werd gekozen met
brightness == light && luminance > 0.6 ? zwart : wit, wat in donkere modusaltijd wit afdwingt — ook op het lichte accent
#60A5FA. Dat is deopslaan-knop. De helderheid van het thema doet er niet toe, alleen die van de
knop zelf: zwart óf wit, net wat wint. 2,54 → 8,26:1, en beide lichte profielen
houden exact de kleur die ze hadden.
Dat is precies waar zo'n meting voor is, en het staat als aparte regel in de
CHANGELOG.
Bouw
AppearancePreviewenAppearanceLegibilityzijn losse widgets insettings/, geen methodes op_SettingsDialogState. Ze zijn pure functies vanhet profiel, en de klasse-ratchet duwde hier de goede kant op — de eerste opzet
liep er 157 regels overheen.
Twaalf nieuwe interfaceteksten, alle 31 talen via
make add-l10n. De negenpaarnamen hergebruiken
Gedempte tekst, dat al bestond.Toetsen
test/appearance_contrast_test.dart: dat de ingebouwde profielen hun eigen normhalen, dat een donker accent in een donker profiel gevonden wórdt, dat de
gemelde verhouding de verhouding tussen de twee gedragen kleuren is, dat de vier
afgeleide paren identiek zijn aan wat het gebouwde thema teruggeeft, en twee
widgettests op de bewerker zelf.
Twee mutaties rood gezien:
profile.primaryColori.p.v.scheme.primaryPoorten
make checkexit 0 (6.030 tests, dekking 86,6%, per-bestand-vloer 0),make check-secrets0,make sast0 bevindingen over 690 bestanden. DAST nietgedraaid — advisory, geen geserveerd oppervlak. Geen afhankelijkheid, geen
SBOM-gevolg. CHANGELOG,
docs/ACCESSIBILITY.mdendocs/SOURCE_MAP.mdbij.Met eigen ogen
flutter run -d macos, donkere modus: het voorbeeld met de echte kleuren, deschone melding op een ingebouwd profiel, en een gedupliceerd profiel met een
donker accent dat de twee regels hierboven oplevert.
Eén ding dat ik onderweg tegenkwam en niet heb aangeraakt: de
+-knopschrijft een gedupliceerd profiel meteen naar de instellingen, niet pas bij
Opslaan. Annuleren laat het profiel dus staan (alleen de kleurwijzigingen
vervallen). Bestaand gedrag, buiten de reikwijdte van deze PR — maar het
verraste me, en het verrast een gebruiker waarschijnlijk ook.