fix(a11y): de donkere modus als geheel bekeken — elf bevindingen, en de twee poorten die ze niet zagen (#780) #817
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!817
Loading…
Reference in a new issue
No description provided.
Delete branch "chore/donkere-modus-rondgang-780"
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?
De rondgang die #780 vroeg: de app draaiend in het profiel Donker, oppervlak
voor oppervlak, met een gemeten verhouding per bevinding. Elf bevindingen, geen
"niets gevonden".
Wat er gerepareerd is
Colors.white24/30/38, plus de ring om de zwarte inkkleur — die vulling haalt zelf 1,4:1, dus zonder ring is het geen keuze maar een gattextDim-helft (3,31–4,24:1) bleek onderweg parallel opgelost in #779 — zie hieronderSamengelopen met #779
De kiezerhelft is onderweg parallel opgelost: #779 splitste
textDimop iniconDim(3:1, iconen) entextMuted(4,5:1, tekst) en kwam op dezelfdegetallen uit. Dat is een betere uitkomst dan de mijne — ik had het niveau
geschrapt, zij houden de gedempte tint waar hij wél mag staan — dus die is bij
het rebasen overgenomen. Wat er van deze kant overbleef: de sneltoetshint en
zijn inkorting; beide stonden er nog.
Hun
standalone_palette_contrast_test.dartmeet dezelfde twee paletten. Mijntoets is daarin opgegaan in plaats van ernaast gezet — twee bestanden die
hetzelfde meten is precies de verdubbeling waar de doc van dat bestand voor
waarschuwt.
Waarom geen poort dit ving
Twee gaten, allebei nu dicht:
Color(0x…)en staat op nul.Colors.white38is dezelfde vrijheid met dezelfde gevolgen en glipt erlangs — daar kwamen
álle tien de presenter-plekken vandaan. Het bezwaar is niet dat 38 te weinig
is, maar dat je aan de aanroepplek niet kunt zíen wat het wordt.
app_theme_contrast_testmeet watThemeDatauitdeelt, en dia-inkt tegenwit. Niet wélke twee tokens samen op het scherm landen, niet de verzwakking
van een token, en niet een tint die een oppervlak zelf aanmaakt.
slideInkFainthaalt 4,4:1 op wit en 2,08:1 opslideRuleSoft— hetzelfdetoken; alleen het paar verraadt het.
Een besluit dat geen kleurwijziging is
Het derde tekstniveau dat de presenter met vier alpha's improviseerde is er
níet gekomen. Op die oppervlakken is het tweede niveau al de dunste grijstint
die 4,5:1 haalt: een niveau daaronder kán geen tekst zijn, en zolang het
bestaat wordt het gebruikt. Dat staat in SOURCE_MAP, want uit de code lees je
het niet terug.
Eén reparatie die niet mocht blijven staan
De themawissel-bevinding is een klasse. Die in één klap sluiten leek simpel —
geef de boom onder
home:een sleutel op de modus — en die versie stond eenuur in de tak met een groene toets eronder. Draaiend viel de app om:
De deck-providers hangen aan het tabblad. Die boom afbreken disposet
DeckNotifier— en erger dan de crash is wat eraan voorafgaat: hetniet-opgeslagen deck van de gebruiker. De toets bewees dat een blad herkleurt,
niet dat de app het overleeft.
Wat er nu staat is de bescheiden variant: de modus in een
InheritedWidget,en één regel per oppervlak dat erop aansluit. Het kwaliteitspaneel en zijn chip
hebben die regel; de klasse staat nog open, met de diagnose en de drie
routes in #814.
Toetsen
Vier, elk één keer rood gezien:
standalone_palette_contrast_test(bestond al, uitgebreid) —PresenterPalette.textMutedin de tekstlat; de inkring gemeten tegen deannotatiebalk op een witte dia, een oppervlak dat in geen enkele lijst staat
en het krapste geval is; en een bronwacht op een doorzichtige
Colors.white/blackin eenTextStyle.slide_quality_panel_contrast_test— het paar per staat in beide modi, pluseen bronwacht tegen een alpha over de voorgrond.
appearance_scope_test— een aangesloten blad moet na een moduswisseling vankleur veranderen; binnen één modus moet de boom juist blijven staan.
app_theme_contrast_test— uitgebreid met dia-inkt op een eigen tint.Wat er níet in zit
Niet nagelopen, en dus nog open: het beamerscherm en het tweede-schermpad, de
git-panelen en de S3/WebDAV-bladeraars, de exportdialoog, het privacypaneel met
de bevindingkaarten, en 24 van de 26 slide-editors. Plus #811 — een harde rand
door elk zwevend veldlabel in donkere modus; geen contrastdefect, en de
reparatie vraagt een ontwerpkeuze die élk tekstveld raakt — en #814.
Poorten
make checkgroen (6543 toetsen),make test-goldengroen na een bewustebijwerking van vijf goldens (0,26–0,98% diff: de plaatshouderregel is
donkerder, verder beweegt er niets).
make check-secretsenmake sastgroen.DAST staat nog niet ingericht; dat is hier niet anders dan anders.
Alle reparaties zijn ook draaiend nagekeken, in beide thema's — inclusief de
themawissel die de eerste poging liet crashen.
Bewaker overgeslagen, expliciet: deze wijziging raakt het bestandsformaat
niet, de opslag niet, geen afhankelijkheid, geen uitgaand verkeer en geen
publieke belofte. Het zijn kleurtokens, een layoutfix en toetsen.
Refs #780
De eerste poging gaf de boom onder `home:` een sleutel op de modus, zodat alles opnieuw bouwt. Dat werkt, en het laat de app omvallen: ProviderException: Tried to use DeckNotifier after `dispose` was called #31 ConsumerStatefulElement.watch … warmTabDerivedProviders #33 _TabContent.build (shell/tab_bar.dart:202) De deck-providers hangen aan het tabblad. Die boom afbreken disposet `DeckNotifier` terwijl er nog naar geluisterd wordt — en erger dan de crash is wat eraan voorafgaat: dat is het niet-opgeslagen deck van de gebruiker. De toets die de reparatie bewaakte was groen. Hij bewees dat een blad na een moduswisseling herkleurt; hij kon niet bewijzen dat de app het overleeft. Daar is de app zelf voor, en pas draaiend kwam het eruit. `AppearanceScope` is nu een `InheritedWidget`: hij zet de vlag in zijn constructor (dus vóór de eerste descendant bouwt, ook in het eerste frame) en publiceert de modus als iets om op aan te sluiten. Een oppervlak dat zich uit `AppTheme` kleurt leest `AppearanceScope.modeOf(context)` — één regel — en herbouwt dan wél. Het kwaliteitspaneel en zijn chip hebben die regel. Dat sluit de klasse niet: elk ánder oppervlak dat zich uit `AppTheme` kleurt en niet van `Theme.of(context)` afhangt, houdt nog steeds de kleuren van het vorige thema vast. Dat staat als beperking in de dartdoc, met de reden dat de voor de hand liggende oplossing hier niet kan zolang de deckstaat aan het tabblad hangt — zodat de volgende die het probeert niet dezelfde crash opnieuw ontdekt. De toets is meegegaan: het blad sluit nu aan zoals het paneel dat doet, en een bronwacht in `slide_quality_panel_contrast_test` bewaakt dat het paneel én de chip die regel houden. De negatieve toets ("een losgekoppeld blad blijft achter") is geschrapt: die legde element-hergebruik van Flutter vast in plaats van gedrag van deze app, en was daardoor niet betrouwbaar rood. Refs #780 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>