fix: documentexport werkt op web via browser-download (#1720) #1723

Merged
brenno merged 1 commit from fix/1720-web-documentexport into main 2026-08-22 18:34:19 +00:00
Owner

Samenvatting

Het exporteren van een document (PDF, Markdown, HTML, LaTeX) werkte niet op de web-build. De bestandskiezer kon geen pad vragen zonder de bytes al te hebben, wat een ArgumentError gooide. De dialoog ving de fout maar meldde alleen dat het niet lukte.

De fix spiegelt het deck-exportpatroon: writeDocumentExport is gesplitst in buildDocumentExportBytes (headless bytes bouwen) en een schrijf-tak die op desktop atomisch naar schijf schrijft en op web FilePicker.saveFile met bytes aanroept als browser-download.

  • lib/services/document_export_service.dart: buildDocumentExportBytes toegevoegd (headless), writeDocumentExport vertakt op kIsWeb, _writeDocumentPdf verwijderd (logica zit nu in buildDocumentExportBytes)
  • lib/widgets/document_editor_screen.dart: _writeDocumentExport vertakt op kIsWeb — op web wordt de bestandsnaam direct bepaald, op desktop blijft de pad-kiezer werken
  • tool/check_audience_boundary.dart: _writeDocumentPdf verwijderd uit registry, writeDocumentExport reden bijgewerkt
  • test/document_export_write_test.dart: 8 nieuwe tests voor buildDocumentExportBytes

Test plan

  • make check groen (10471 tests, 87.2% dekking)
  • buildDocumentExportBytes levert identieke bytes voor md/latex
  • buildDocumentExportBytes levert geldige HTML/PDF
  • PDF-callbacks (unsupported characters, coarse logo) vuren vanuit headless bouwer
  • Handmatig: open web-build, exporteer een document als PDF/MD/HTML/LaTeX → browser-download

Generated with Devin

## Samenvatting Het exporteren van een document (PDF, Markdown, HTML, LaTeX) werkte niet op de web-build. De bestandskiezer kon geen pad vragen zonder de bytes al te hebben, wat een `ArgumentError` gooide. De dialoog ving de fout maar meldde alleen dat het niet lukte. De fix spiegelt het deck-exportpatroon: `writeDocumentExport` is gesplitst in `buildDocumentExportBytes` (headless bytes bouwen) en een schrijf-tak die op desktop atomisch naar schijf schrijft en op web `FilePicker.saveFile` met bytes aanroept als browser-download. - `lib/services/document_export_service.dart`: `buildDocumentExportBytes` toegevoegd (headless), `writeDocumentExport` vertakt op `kIsWeb`, `_writeDocumentPdf` verwijderd (logica zit nu in `buildDocumentExportBytes`) - `lib/widgets/document_editor_screen.dart`: `_writeDocumentExport` vertakt op `kIsWeb` — op web wordt de bestandsnaam direct bepaald, op desktop blijft de pad-kiezer werken - `tool/check_audience_boundary.dart`: `_writeDocumentPdf` verwijderd uit registry, `writeDocumentExport` reden bijgewerkt - `test/document_export_write_test.dart`: 8 nieuwe tests voor `buildDocumentExportBytes` #### Test plan - [x] `make check` groen (10471 tests, 87.2% dekking) - [x] `buildDocumentExportBytes` levert identieke bytes voor md/latex - [x] `buildDocumentExportBytes` levert geldige HTML/PDF - [x] PDF-callbacks (unsupported characters, coarse logo) vuren vanuit headless bouwer - [ ] Handmatig: open web-build, exporteer een document als PDF/MD/HTML/LaTeX → browser-download Generated with [Devin](https://devin.ai)
fix: documentexport werkt op web via browser-download (#1720)
All checks were successful
scans / scans (pull_request) Successful in 2m6s
static-gate / static-gate (pull_request) Successful in 4m43s
3c578d6f1d
Het document-exportpad had geen kIsWeb-tak: FilePicker.saveFile werd
zonder bytes aangeroepen, wat op web een ArgumentError gooit omdat de
browser geen pad kan vragen zonder de bytes al te hebben. De dialoog
ving de fout maar meldde alleen dat het niet lukte.

Oplossing: spiegel het deck-exportpatroon. Splits writeDocumentExport
in buildDocumentExportBytes (headless bytes bouwen) en de schrijf-tak
die op desktop atomisch naar schijf schrijft en op web
FilePicker.saveFile met bytes aanroept als browser-download. De
aanroeper in _writeDocumentExport vertakt op kIsWeb: op web wordt de
bestandsnaam direct via suggestedDocumentExportFileName bepaald (zonder
pad-kiezer), op desktop blijft de bestaande pad-kiezer werken.

De audience-boundary registry is bijgewerkt: _writeDocumentPdf is
samengevoegd met writeDocumentExport (zijn logica zit nu in
buildDocumentExportBytes), en de reden-tekst vermeldt nu alle vier
formaten en beide platformen.

Tests: 8 nieuwe tests voor buildDocumentExportBytes verifiëren dat
md/latex bytes identiek zijn aan wat writeDocumentExport schrijft, html/pdf
bytes geldige inhoud bevatten, en pdf-callbacks (unsupported characters,
coarse logo) vanuit de headless bouwer vuren.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit b654077621 into main 2026-08-22 18:34:19 +00:00
Sign in to join this conversation.
No description provided.