Documentexport werkt niet op web: bestandskiezer kan geen pad vragen zonder bytes #1720
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#1720
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Probleem
Het exporteren van een document (PDF, Markdown, HTML, LaTeX) werkt niet op de web-build. Geen van de vier formaten komt de browser uit als download. De exportdialoog meldt dat het niet gelukt is en laat het document ongemoeid.
Eerder hing de knop oneindig op een spinner zonder melding. Dat is inmiddels opgelost door de
ArgumentErrorte vangen indocument_export_dialog.dart(regels 77-86), maar de onderliggende oorzaak staat er nog.Validatie
Het document-exportpad mist de
kIsWeb-tak die het deck-exportpad wél heeft.Deck-export (
lib/services/export_service.dartregels 271-283) doet het goed: de bytes worden eerst gebouwd, dan pas vertakt opkIsWeb. Op web gaatFilePicker.saveFilemet bytes mee (Blob + anker = browser-download), op desktop wordt atomisch naar schijf geschreven.Document-export (
lib/widgets/document_editor_screen.dart_writeDocumentExport, regels 820-922) heeft geenkIsWeb-tak:_pickDocumentExportPathroeptpickDocumentExportDestinationaan, datFilePicker.saveFileaanroept zonder bytes. Op web kan de bestandskiezer geen pad vragen zonder de bytes al te hebben, en gooit eenArgumentError.writeDocumentExportviawriteStringAtomic(File(outputPath), ...)/writeBytesAtomic(File(outputPath), ...)— op web bestaat geen bestandssysteem.De vangst in de dialoog (regels 77-86) bevestigt dit zelf: de commentaar zegt letterlijk dat de bestandskiezer op web geen pad kan kiezen zonder de bytes al te hebben en een
ArgumentErrorgooit.Root cause
De document-export is gebouwd als een desktop-pad: eerst pad kiezen, dan naar dat pad schrijven. Op web werkt dat niet — de browser wil de bytes up front als download, niet een pad om naartoe te schrijven.
Voorgestelde oplossing
Spiegel het deck-exportpatroon: bytes eerst bouwen, dan pas vertakken op
kIsWeb.writeDocumentExportin bouwen en schrijven. De PDF-tak heeft albuildDocumentExportPdfdie bytes teruggeeft zonder te schrijven. De md/html/latex-takken bouwen nu een string en schrijven die direct weg — haal de string-bouw los van het wegschrijven, zodat er een functie ontstaat dieUint8Listteruggeeft._writeDocumentExportopkIsWeb:writeDocumentExportnaar pad (bestaande flow).FilePicker.saveFile(fileName: fileName, bytes: bytes)(browser-download). Bestandsnaam viasuggestedDocumentExportFileName(bestaat al).suggestedDocumentExportFileNamelevert al de juiste naam met extensie en profiel-tag. Die kan direct alsfileNamemee.Waarom de vertakking in
writeDocumentExportzelfwriteDocumentExportis geregistreerd alsSurfaceKind.audience-oppervlak intool/check_audience_boundary.dartjuist omdat het de enige plek is diewriteStringAtomic/writeBytesAtomicraakt. EenkIsWeb-tak daarbinnen dieFilePicker.saveFiledoet in plaats van schrijven, houdt dat oppervlak intact — één plek waar documentinhoud de machine verlaat. Dat is de netste plek voor de vertakking.Scope
file_pickeris al aanwezig)._redactionManifestFiles) hoort hier ook mee te reizen — zelfde patroon.Repro
Labels
bug