fix: Wasm web-build + evaluatie #1735 (Wide Gamut) en #1742 (webview_flutter_web) #1754

Merged
brenno merged 1 commit from test/wasm-widegamut-webview-1734-1735-1742 into main 2026-08-23 20:20:55 +00:00
Owner

Summary

Drie Flutter 3.47-issues in één PR: één codewijziging (#1734), twee evaluaties zonder codewijziging (#1735, #1742).

#1734: Wasm web-build

De nativeapi-migratie (#1741) brak de Wasm web-build: nativeapi en cnativeapi gebruiken dart:ffi, dat niet op web beschikbaar is. De import stond direct in fullscreen_presenter.dart en app_shell.dart importeerde native_window_io.dart direct in plaats van via de facade.

Fix: Nieuwe display_info facade met conditional import (io gebruikt nativeapi, web is no-op). app_shell.dart importeert nu via de native_window.dart facade. native_window_stub.dart aangevuld met setWillCloseCallback en minimumWindowSize.

Build-resultaat: flutter build web --release --wasm slaagt (69,9s). CanvasKit is self-hosted, CSP behoudt connect-src 'self' https:.

#1735: Wide Gamut Color rendering op macOS

Evaluatie: Flutter 3.47 activeert Wide Gamut Color standaard op macOS. Dit is een rendering-engine wijziging (Impeller) die automatisch actief is — er is geen codewijziging nodig in OciDeck. De macOS build (PR #1753) slaagt met SPM en Impeller.

Wide Gamut Color betekent dat kleuren in een bredere kleurruimte (Display P3) gerenderd worden in plaats van sRGB. Dit is een visuele verandering die alleen met beeldkeuring te verifiëren is: exporteer een PDF met gekleurde slides (TLP-badge, charts) en vergelijk met een pre-3.47 build. OciDeck's PDF-pipeline (lib/services/pdf/) en thema-systeem gebruiken standaard Flutter/CanvasKit kleurweergave, die Wide Gamut Color automatisch dekt.

Conclusie: Geen codewijziging. Beeldkeuring na merge: PDF-export met kleuren visueel controleren.

#1742: webview_flutter_web vervanging

Evaluatie: OciDeck gebruikt webview_flutter_web al niet meer voor Mermaid-rendering op web. Er is een eigen dart:js_interop-gebaseerde renderer (mermaid_web_renderer.dart) die mermaid.min.js direct in de pagina laadt via een <script src> tag. Dit werkt onder de strikte CSP (script-src 'self').

webview_flutter wordt op native (macOS, iOS, Android) nog wel gebruikt voor Mermaid-rendering via een verborgen WebView. De webview_flutter_web dependency is alleen een transitive dependency van webview_flutter die op web niet functioneel gebruikt wordt.

Conclusie: De web-route is al vervangen. De webview_flutter_web dependency kan verwijderd worden door webview_flutter een native-only dependency te maken, maar dat is een aparte optimalisatie die geen functioneel probleem oplost.

Test plan

  • make check groen (10494 tests, 87.2% coverage)
  • make sast schoon (semgrep, 0 findings)
  • flutter build web --release --wasm geslaagd
  • flutter build macos geslaagd (PR #1753)
  • flutter build ios --no-codesign geslaagd (PR #1753)
  • Beeldkeuring na merge: Wasm app in browser, PDF-export met kleuren op macOS

Generated with Devin

## Summary Drie Flutter 3.47-issues in één PR: één codewijziging (#1734), twee evaluaties zonder codewijziging (#1735, #1742). ### #1734: Wasm web-build De nativeapi-migratie (#1741) brak de Wasm web-build: `nativeapi` en `cnativeapi` gebruiken `dart:ffi`, dat niet op web beschikbaar is. De import stond direct in `fullscreen_presenter.dart` en `app_shell.dart` importeerde `native_window_io.dart` direct in plaats van via de facade. **Fix**: Nieuwe `display_info` facade met conditional import (io gebruikt nativeapi, web is no-op). `app_shell.dart` importeert nu via de `native_window.dart` facade. `native_window_stub.dart` aangevuld met `setWillCloseCallback` en `minimumWindowSize`. **Build-resultaat**: `flutter build web --release --wasm` slaagt (69,9s). CanvasKit is self-hosted, CSP behoudt `connect-src 'self' https:`. ### #1735: Wide Gamut Color rendering op macOS **Evaluatie**: Flutter 3.47 activeert Wide Gamut Color standaard op macOS. Dit is een rendering-engine wijziging (Impeller) die automatisch actief is — er is geen codewijziging nodig in OciDeck. De macOS build (PR #1753) slaagt met SPM en Impeller. Wide Gamut Color betekent dat kleuren in een bredere kleurruimte (Display P3) gerenderd worden in plaats van sRGB. Dit is een **visuele** verandering die alleen met beeldkeuring te verifiëren is: exporteer een PDF met gekleurde slides (TLP-badge, charts) en vergelijk met een pre-3.47 build. OciDeck's PDF-pipeline (`lib/services/pdf/`) en thema-systeem gebruiken standaard Flutter/CanvasKit kleurweergave, die Wide Gamut Color automatisch dekt. **Conclusie**: Geen codewijziging. Beeldkeuring na merge: PDF-export met kleuren visueel controleren. ### #1742: webview_flutter_web vervanging **Evaluatie**: OciDeck gebruikt `webview_flutter_web` **al niet meer** voor Mermaid-rendering op web. Er is een eigen `dart:js_interop`-gebaseerde renderer (`mermaid_web_renderer.dart`) die mermaid.min.js direct in de pagina laadt via een `<script src>` tag. Dit werkt onder de strikte CSP (`script-src 'self'`). `webview_flutter` wordt op native (macOS, iOS, Android) nog wel gebruikt voor Mermaid-rendering via een verborgen WebView. De `webview_flutter_web` dependency is alleen een transitive dependency van `webview_flutter` die op web niet functioneel gebruikt wordt. **Conclusie**: De web-route is al vervangen. De `webview_flutter_web` dependency kan verwijderd worden door `webview_flutter` een native-only dependency te maken, maar dat is een aparte optimalisatie die geen functioneel probleem oplost. ## Test plan - [x] `make check` groen (10494 tests, 87.2% coverage) - [x] `make sast` schoon (semgrep, 0 findings) - [x] `flutter build web --release --wasm` geslaagd - [x] `flutter build macos` geslaagd (PR #1753) - [x] `flutter build ios --no-codesign` geslaagd (PR #1753) - [ ] Beeldkeuring na merge: Wasm app in browser, PDF-export met kleuren op macOS Generated with [Devin](https://devin.ai)
fix: Wasm web-build werkt — nativeapi achter conditional imports (#1734)
All checks were successful
scans / scans (pull_request) Successful in 3m2s
static-gate / static-gate (pull_request) Successful in 6m42s
e535f395ea
De nativeapi-migratie (#1741) brak de Wasm web-build: nativeapi en
cnativeapi gebruiken dart:ffi, dat niet op web beschikbaar is. De
import stond direct in fullscreen_presenter.dart en app_shell.dart
importeerde native_window_io.dart direct in plaats van via de facade.

Wijzigingen:
- `display_info.dart` + `display_info_data.dart` + `display_info_io.dart`
  + `display_info_web.dart`: nieuwe facade voor schermdetectie en
  vensterverhuizing, met conditional import (io gebruikt nativeapi,
  web is no-op). fullscreen_presenter.dart en presenter_displays.dart
  gebruiken de facade in plaats van nativeapi direct.
- `app_shell.dart`: importeert `native_window.dart` (de facade) in
  plaats van `native_window_io.dart` direct.
- `native_window_stub.dart`: aangevuld met `setWillCloseCallback` en
  `minimumWindowSize` die de io-kant wel heeft.
- `docs/SOURCE_MAP.md`: nieuwe files gedocumenteerd.
- `tool/coverage_summary.dart`: display_info files in uncoveredBaseline
  (FFI niet uitvoerbaar onder flutter test).

Build-resultaat: `flutter build web --release --wasm` slaagt (69,9s).
CanvasKit is self-hosted, CSP behoudt `connect-src 'self' https:`.

#1735 (Wide Gamut Color) en #1742 (webview_flutter_web) vereisen geen
codewijziging — evaluatie in PR-beschrijving.

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

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit 27de510baa into main 2026-08-23 20:20:55 +00:00
Sign in to join this conversation.
No description provided.