Paginaweergave hermeet afbeeldingen niet wanneer document of projectpad verandert #1652

Closed
opened 2026-08-21 12:00:26 +00:00 by brenno · 1 comment
Owner

Probleem

PagedDocumentView bepaalt _hasImages één keer uit de initiële Markdown. Na het invoegen van de eerste afbeelding blijft de meetboom daarom verdwijnen na de synchrone eerste meting; de later gedecodeerde afbeeldingshoogte kan de pagina-einden niet corrigeren. Een gewijzigd projectPath invalideert de meting evenmin, terwijl hetzelfde relatieve beeld daardoor ineens wel of niet resolveerbaar kan zijn.

Reproductie

  1. Open paginaweergave voor een document zonder afbeeldingen.
  2. Voeg een afbeelding in waarvan de uiteindelijke hoogte een pagina-einde verschuift.
  3. Bekijk de pagina-einden na het laden.
  4. Herhaal met Opslaan als naar een andere projectmap.

Verwacht

De aanwezigheid/resolutie van afbeeldingen wordt na Markdown- en projectpadwijzigingen opnieuw bepaald en de pagina's worden na decode opnieuw gemeten.

Technische aanwijzing

lib/widgets/reader/paged_document_view.dart declareert late final bool _hasImages. didUpdateWidget reset wel enkele meetwaarden maar niet dit veld en vergelijkt projectPath niet.

Gevonden bij audit van commit d439638c6b.

## Probleem PagedDocumentView bepaalt _hasImages één keer uit de initiële Markdown. Na het invoegen van de eerste afbeelding blijft de meetboom daarom verdwijnen na de synchrone eerste meting; de later gedecodeerde afbeeldingshoogte kan de pagina-einden niet corrigeren. Een gewijzigd projectPath invalideert de meting evenmin, terwijl hetzelfde relatieve beeld daardoor ineens wel of niet resolveerbaar kan zijn. ## Reproductie 1. Open paginaweergave voor een document zonder afbeeldingen. 2. Voeg een afbeelding in waarvan de uiteindelijke hoogte een pagina-einde verschuift. 3. Bekijk de pagina-einden na het laden. 4. Herhaal met Opslaan als naar een andere projectmap. ## Verwacht De aanwezigheid/resolutie van afbeeldingen wordt na Markdown- en projectpadwijzigingen opnieuw bepaald en de pagina's worden na decode opnieuw gemeten. ## Technische aanwijzing lib/widgets/reader/paged_document_view.dart declareert late final bool _hasImages. didUpdateWidget reset wel enkele meetwaarden maar niet dit veld en vergelijkt projectPath niet. Gevonden bij audit van commit d439638c6bd1b519d68d87680cb022b7d5eddc85.
Author
Owner

Triage: accepted

Bevestigd tegen main (e93ef205c). lib/widgets/reader/paged_document_view.dart declareert late final bool _hasImages, één keer bepaald uit de Markdown bij het opbouwen. didUpdateWidget zet _blockHeights, _measuring, _notes, _blockTexts en _timelinePagination opnieuw, maar dit veld kán het niet resetten (het is final) en widget.projectPath staat niet in de vergelijking.

Twee gevolgen, beide echt:

  • Document begint zonder afbeelding → build laat de meetboom vallen na de eerste ronde. De later gedecodeerde beeldhoogte bereikt de paginering dus nooit; de einden blijven op de plaatshouderhoogte staan.
  • Opslaan als naar een andere map verandert projectPath zonder hermeting, terwijl hetzelfde relatieve pad daar wél of juist níét oplost — en dus een andere hoogte krijgt.

Oplossingsrichting

_hasImages van late final naar een gewoon veld, opnieuw bepaald in didUpdateWidget naast _blockTexts, en widget.projectPath != old.projectPath toevoegen aan de resetvoorwaarde. Let op dat de reset dan ook _noteHeights meeneemt — die hangt aan dezelfde meetronde.

Regressietest (verplicht)

test/paged_document_view_test.dart:

  • pump zonder afbeelding, update mét afbeelding → meetboom staat er nog (find op de meetlaag) en het aantal vellen volgt de latere hoogte;
  • alleen projectPath gewijzigd → hermeting, geen behoud van de oude hoogtes.

Kosten

Klein: één bestand, twee tests.

Prioriteit

Middel. Het schuift pagina-einden ten opzichte van de druk, en dat is precies waarvoor deze weergave bestaat.

## Triage: accepted **Bevestigd tegen `main` (e93ef205c).** `lib/widgets/reader/paged_document_view.dart` declareert `late final bool _hasImages`, één keer bepaald uit de Markdown bij het opbouwen. `didUpdateWidget` zet `_blockHeights`, `_measuring`, `_notes`, `_blockTexts` en `_timelinePagination` opnieuw, maar dit veld kán het niet resetten (het is `final`) en `widget.projectPath` staat niet in de vergelijking. Twee gevolgen, beide echt: - Document begint zonder afbeelding → `build` laat de meetboom vallen na de eerste ronde. De later gedecodeerde beeldhoogte bereikt de paginering dus nooit; de einden blijven op de plaatshouderhoogte staan. - `Opslaan als` naar een andere map verandert `projectPath` zonder hermeting, terwijl hetzelfde relatieve pad daar wél of juist níét oplost — en dus een andere hoogte krijgt. ## Oplossingsrichting `_hasImages` van `late final` naar een gewoon veld, opnieuw bepaald in `didUpdateWidget` naast `_blockTexts`, en `widget.projectPath != old.projectPath` toevoegen aan de resetvoorwaarde. Let op dat de reset dan ook `_noteHeights` meeneemt — die hangt aan dezelfde meetronde. ## Regressietest (verplicht) `test/paged_document_view_test.dart`: - pump zonder afbeelding, update mét afbeelding → meetboom staat er nog (`find` op de meetlaag) en het aantal vellen volgt de latere hoogte; - alleen `projectPath` gewijzigd → hermeting, geen behoud van de oude hoogtes. ## Kosten Klein: één bestand, twee tests. ## Prioriteit Middel. Het schuift pagina-einden ten opzichte van de druk, en dat is precies waarvoor deze weergave bestaat.
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#1652
No description provided.