|
|
@@ -2230,6 +2230,46 @@ gratis doorstart, elke reload kost een herhaling van stap 1.
|
|
|
P0-3). Vuistregel blijft: 1-2 pogingen (incl. 1 reload), dan
|
|
|
overdragen met exacte stappen — niet blijven proberen.
|
|
|
|
|
|
+**"Convert to Component" bestaat wél en werkt — het is de manier om een blok
|
|
|
+herbruikbaar te maken, want widget copy/paste kan niet.** Bewezen 2026-09-20 op
|
|
|
+`homeCopy` (de Home-filterbalk). Rechtsklik de node in de widget tree →
|
|
|
+**Convert to Component** (onderaan het menu, onder *Copy AI Selector*) → dialoog
|
|
|
+"New Component" met een al gefocust naamveld (meteen typen, niet eerst klikken) →
|
|
|
+*Create Component*. De builder springt naar het nieuwe component; op de pagina
|
|
|
+staat de node vervangen door een `wrapWithModel(...)`-instantie. Acties, custom
|
|
|
+functions, App State-schrijfacties en custom actions komen **allemaal schoon mee**.
|
|
|
+- ⚠️ **Wat NIET meekomt: alles wat naar buiten het geconverteerde blok wijst.**
|
|
|
+ Twee soorten, allebei gemeld in het Issues-paneel:
|
|
|
+ 1. Een **page state**-veld wordt omgezet naar een *Update Component State*-actie
|
|
|
+ met veldnaam **"Removed Field"** — de actie blijft dus staan, alleen het veld
|
|
|
+ ontbreekt. Fix: op de component-root **+ Add Field** (Boolean, Initial Value
|
|
|
+ expliciet zetten) → in de actie *Remove* op de kapotte rij → *Add Field* →
|
|
|
+ het nieuwe veld → *Select Update Type* (bv. **Toggle Value**).
|
|
|
+ 2. Een **"Clear Text Fields/Pin Codes"**-actie die een widget buiten het
|
|
|
+ component wist. Die geeft een **harde compile-error**
|
|
|
+ (`The getter 'textController' isn't defined`) terwijl **`export-code` gewoon
|
|
|
+ slaagt** — je merkt het dus pas bij de build. Draai na elke conversie
|
|
|
+ `dart analyze`, niet alleen een export.
|
|
|
+- **Vuistregel: converteer het hele samenhangende blok in één keer.** Hoort er een
|
|
|
+ `TextField` bij een knop, wrap ze eerst samen in een `Column` en converteer die —
|
|
|
+ dan wijst niets meer naar buiten en zijn beide fouten er nooit.
|
|
|
+- Een actie tijdelijk onschadelijk maken kan met **⋮ op de actie-node → Disable
|
|
|
+ Action** (netter dan verwijderen). Let op: een disabled actie zonder geldig doel
|
|
|
+ telt daarna als fout *"Action Configuration — Action not defined"*.
|
|
|
+
|
|
|
+**Een component zijn pagina laten herbouwen: "Update Page on Changes" op de
|
|
|
+INSTANTIE.** Staat in het rechterpaneel van de component-instantie onder
|
|
|
+**Component Properties** (naast *Use Hero Animation*), en genereert
|
|
|
+`updateOnChange: true` in de `wrapWithModel(...)`. Bewezen 2026-09-20. Dit is het
|
|
|
+mechanisme waarmee elk component al werkt: elke `*_widget.dart` override `setState`
|
|
|
+met `super.setState(callback); _model.onUpdate();`, en `onUpdate()` roept de
|
|
|
+pagina's `safeSetState` aan — **maar alleen als deze toggle aanstaat**. Stond in dit
|
|
|
+project tot 2026-09-20 nergens aan (0 treffers op `updateOnChange: true`).
|
|
|
+**Nodig zodra een component App State zet waar de pagina zelf op reageert** (een
|
|
|
+filterbalk die de lijstparameters van de pagina bepaalt, een conditie op een widget
|
|
|
+buiten het component). Zonder de toggle verandert de App State wel, maar bouwt de
|
|
|
+pagina niet opnieuw en zie je niets gebeuren.
|
|
|
+
|
|
|
**Widget kopiëren/plakken werkt NIET via browser-automation — dood
|
|
|
spoor, niet opnieuw proberen.** Bevestigd 2026-09-01: "Copy Widget" +
|
|
|
"Paste Widget" uit het ⌘+K-palet, én de sneltoetsen Ctrl+C/Ctrl+V op
|