[#1801] De beschrijving van een beeldverwijzing is niet middenin te corrigeren #1863

Closed
opened 2026-08-29 21:58:40 +00:00 by brenno · 0 comments
Owner

Wat er gebeurt

Open Afbeeldingsverwijzingen op een Bullets + Afbeelding-dia, kies een regel met een verwijzing en typ een beschrijving. Zet de cursor daarna middenin de zin en typ één teken: de cursor springt naar het eind, en alles wat je verder typt komt achteraan te staan. Een woord verbeteren middenin een beschrijving kan dus niet — je kunt hem alleen wissen en opnieuw typen.

Herhaalstappen

  1. Maak een dia van het type Bullets + Afbeelding met een afbeelding.
  2. Knop Afbeeldingsverwijzingen → een regel kiezen → Toevoegen.
  3. Typ in Beschrijving (voor schermlezer): de print met display.
  4. Klik tussen de en print en typ grote .

Verwacht: de grote print met display. Werkelijk: na het eerste teken staat de cursor achteraan en groeit de tekst aan het eind aan.

Oorzaak

lib/widgets/editors/callout_editor.dart r. 527 — de controller wordt in build() gemaakt, met de selectie hard op het eind:

controller: TextEditingController(text: callout.description)
  ..selection = TextSelection.fromPosition(
    TextPosition(offset: callout.description.length),
  ),

onChanged_setDescriptionsetState → nieuwe build → nieuwe controller → selectie weer aan het eind. Bijkomend: elke controller die zo ontstaat wordt nooit disposed.

Reparatie

Eén controller die bij de State hoort: aanmaken in initState, opruimen in dispose, en bij het wisselen van verwijzing alleen de waarde zetten (TextEditingValue) zonder de selectie te verplaatsen. De tekst bijwerken mag de cursor niet aanraken.

Wat dit had moeten vangen

test/callout_editor_test.dart heeft veertien widget-tests en raakt het beschrijvingsveld alleen als beginwaarde. De regressietest: veld vullen, selection middenin zetten, één teken invoeren, en dan toetsen dat (a) de tekst op de juiste plek is aangevuld én (b) controller.selection één positie verder staat in plaats van aan het eind. Zonder (b) komt de fout terug zodra iemand het veld opnieuw aanraakt.

Verwant

Bevinding 11 in #1859. Het ontwerp daar verhuist dit veld naar het regelpaneel; die verhuizing repareert dit niet — de controller moet hoe dan ook uit build().

## Wat er gebeurt Open **Afbeeldingsverwijzingen** op een *Bullets + Afbeelding*-dia, kies een regel met een verwijzing en typ een beschrijving. Zet de cursor daarna middenin de zin en typ één teken: de cursor springt naar het eind, en alles wat je verder typt komt achteraan te staan. Een woord verbeteren middenin een beschrijving kan dus niet — je kunt hem alleen wissen en opnieuw typen. ## Herhaalstappen 1. Maak een dia van het type *Bullets + Afbeelding* met een afbeelding. 2. Knop **Afbeeldingsverwijzingen** → een regel kiezen → **Toevoegen**. 3. Typ in *Beschrijving (voor schermlezer)*: `de print met display`. 4. Klik tussen `de ` en `print` en typ `grote `. Verwacht: `de grote print met display`. Werkelijk: na het eerste teken staat de cursor achteraan en groeit de tekst aan het eind aan. ## Oorzaak `lib/widgets/editors/callout_editor.dart` r. 527 — de controller wordt in `build()` gemaakt, met de selectie hard op het eind: ```dart controller: TextEditingController(text: callout.description) ..selection = TextSelection.fromPosition( TextPosition(offset: callout.description.length), ), ``` `onChanged` → `_setDescription` → `setState` → nieuwe `build` → nieuwe controller → selectie weer aan het eind. Bijkomend: elke controller die zo ontstaat wordt nooit `dispose`d. ## Reparatie Eén controller die bij de `State` hoort: aanmaken in `initState`, opruimen in `dispose`, en bij het wisselen van verwijzing alleen de *waarde* zetten (`TextEditingValue`) zonder de selectie te verplaatsen. De tekst bijwerken mag de cursor niet aanraken. ## Wat dit had moeten vangen `test/callout_editor_test.dart` heeft veertien widget-tests en raakt het beschrijvingsveld alleen als beginwaarde. De regressietest: veld vullen, `selection` middenin zetten, één teken invoeren, en dan toetsen dat **(a)** de tekst op de juiste plek is aangevuld én **(b)** `controller.selection` één positie verder staat in plaats van aan het eind. Zonder (b) komt de fout terug zodra iemand het veld opnieuw aanraakt. ## Verwant Bevinding 11 in #1859. Het ontwerp daar verhuist dit veld naar het regelpaneel; die verhuizing repareert dit niet — de controller moet hoe dan ook uit `build()`.
brenno 2026-08-31 07:00:44 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1863
No description provided.