|
@@ -2111,7 +2111,7 @@ in Drupal, geen uitputtende audit.
|
|
|
Volledige onderbouwing met screenshots: [Designbrug-rapport](https://claude.ai/code/artifact/29f3412a-305f-49f3-971c-cd9bd310beb1).
|
|
Volledige onderbouwing met screenshots: [Designbrug-rapport](https://claude.ai/code/artifact/29f3412a-305f-49f3-971c-cd9bd310beb1).
|
|
|
Afvinkbare werklijst: [Designbrug werklijst](https://claude.ai/code/artifact/0c0c7347-d681-417d-83d7-7feb1de6457d).)*
|
|
Afvinkbare werklijst: [Designbrug werklijst](https://claude.ai/code/artifact/0c0c7347-d681-417d-83d7-7feb1de6457d).)*
|
|
|
|
|
|
|
|
-**P1-39 · Eigenaar: Claude/Bob — restpunt van het kleurwerk van
|
|
|
|
|
|
|
+**P1-39 · Eigenaar: Claude — bezig (sessie 2026-08-31 avond) — restpunt van het kleurwerk van
|
|
|
2026-08-31.** Drie knoppen op `stadsactiviteit_aanmaken_widget.dart`
|
|
2026-08-31.** Drie knoppen op `stadsactiviteit_aanmaken_widget.dart`
|
|
|
staan nog op thema-`primary` (rood): "Logo kiezen" (:2458), "Foto's
|
|
staan nog op thema-`primary` (rood): "Logo kiezen" (:2458), "Foto's
|
|
|
kiezen" (:2547) en "Activiteit indienen" (:2650). Bewust overgeslagen
|
|
kiezen" (:2547) en "Activiteit indienen" (:2650). Bewust overgeslagen
|
|
@@ -2120,7 +2120,7 @@ pagina bouwde. Fix per knop: Button-node selecteren → rechterpaneel
|
|
|
**Fill Color** → swatch → **Theme Colors → Secondary**. Vuistregel
|
|
**Fill Color** → swatch → **Theme Colors → Secondary**. Vuistregel
|
|
|
blijft: rood = merk en chroom, oranje = wat je aanklikt.
|
|
blijft: rood = merk en chroom, oranje = wat je aanklikt.
|
|
|
|
|
|
|
|
-**P1-33 · Eigenaar: Claude** (mechanisch, ±1 sessie; P1-32 is
|
|
|
|
|
|
|
+**P1-33 · Eigenaar: Claude — bezig (sessie 2026-08-31 avond)** (mechanisch, ±1 sessie; P1-32 is
|
|
|
afgerond 2026-08-31, dus dit kan nu).
|
|
afgerond 2026-08-31, dus dit kan nu).
|
|
|
Drie bijna-gelijke hardcoded roden vervangen door thema-`primary`:
|
|
Drie bijna-gelijke hardcoded roden vervangen door thema-`primary`:
|
|
|
`#B1061E` (42×), `#B50808` (15×), `#B12727` (8×) — geen daarvan is het
|
|
`#B1061E` (42×), `#B50808` (15×), `#B12727` (8×) — geen daarvan is het
|
|
@@ -2454,6 +2454,16 @@ horeca-blok bij stadsactiviteiten op `EventCurrent`) blijft bewust
|
|
|
liggen tot Bob erop terugkomt — geen eigen taak-ID.)*
|
|
liggen tot Bob erop terugkomt — geen eigen taak-ID.)*
|
|
|
|
|
|
|
|
**P2-7 · Eigenaar: Bob.** Opschonen:
|
|
**P2-7 · Eigenaar: Bob.** Opschonen:
|
|
|
|
|
+- **Twee kopieën uit de sessie van 2026-08-31 (Claude), aangemaakt als
|
|
|
|
|
+ vangnet vóór het P2-21-werk:** `homeCopy`
|
|
|
|
|
+ (`lib/uitgaanspaginas/home_copy/`) en
|
|
|
|
|
+ `HomeUitgaantabelKaartComponentCopy`
|
|
|
|
|
+ (`lib/uitgaanspaginas/home_uitgaantabel_kaart_component_copy/`).
|
|
|
|
|
+ **`homeCopy` kan weg** — de Home-pagina is volledig teruggedraaid en
|
|
|
|
|
+ met een verse export byte-identiek aan het origineel bevonden, dus dat
|
|
|
|
|
+ vangnet is niet meer nodig. **`HomeUitgaantabelKaartComponentCopy`
|
|
|
|
|
+ bewaren zolang P2-21 openstaat** (herstelpunt als de
|
|
|
|
|
+ pagination-omzetting misgaat); daarna ook weg.
|
|
|
- **Nieuw bevestigd dood (2026-08-31, Claude, code-only; geverifieerd
|
|
- **Nieuw bevestigd dood (2026-08-31, Claude, code-only; geverifieerd
|
|
|
met `grep -rn "components/<bestand>" lib/` — 0 importeurs):**
|
|
met `grep -rn "components/<bestand>" lib/` — 0 importeurs):**
|
|
|
`lib/components/uitgaantabel_kaart_widget.dart` +
|
|
`lib/components/uitgaantabel_kaart_widget.dart` +
|
|
@@ -3270,101 +3280,129 @@ kaarttitels op afbreken/overlopen nakijken. Ook een legitieme uitkomst:
|
|
|
niet doen — dan is de app herkenbaar op kleur maar mist hij de
|
|
niet doen — dan is de app herkenbaar op kleur maar mist hij de
|
|
|
kranten-uitstraling.
|
|
kranten-uitstraling.
|
|
|
|
|
|
|
|
-**P2-21 · Eigenaar: Claude (analyse afgerond, builder-werk resteert).**
|
|
|
|
|
-Tabletweergave herschikken i.p.v. uitrekken. Verifiëren op
|
|
|
|
|
-`emulator-5556` (tablet) én telefoonformaat. Staat los van P1-11
|
|
|
|
|
-(labels/overflow, al afgerond) — dit gaat puur over kolomindeling.
|
|
|
|
|
|
|
+**P2-21 · Eigenaar: Claude (analyse af; uitvoering wacht op een besluit
|
|
|
|
|
+van Bob, zie de blokkade bij punt 3).** Tabletweergave herschikken
|
|
|
|
|
+i.p.v. uitrekken. Verifiëren op `emulator-5556` (tablet) én
|
|
|
|
|
+telefoonformaat. Staat los van P1-11 (labels/overflow, al afgerond).
|
|
|
|
|
|
|
|
-**Analyse afgerond 2026-08-31 (Claude, code-only + live screenshots op
|
|
|
|
|
-`emulator-5556`). Uitkomst: de klacht klopt, maar geldt voor minder
|
|
|
|
|
-pagina's dan gedacht — en één deel ervan (de sliderband) blijkt géén
|
|
|
|
|
-tabletprobleem te zijn.**
|
|
|
|
|
-
|
|
|
|
|
-*Meetgegevens.* FlutterFlow's breekpunten staan in
|
|
|
|
|
|
|
+**Meetgegevens (2026-08-31, Claude).** Breekpunten staan in
|
|
|
`lib/flutter_flow/flutter_flow_util.dart:378-380`: `kBreakpointSmall`
|
|
`lib/flutter_flow/flutter_flow_util.dart:378-380`: `kBreakpointSmall`
|
|
|
479, `kBreakpointMedium` 767, `kBreakpointLarge` 991 (logische px).
|
|
479, `kBreakpointMedium` 767, `kBreakpointLarge` 991 (logische px).
|
|
|
`emulator-5556` is 2560x1600 @ 320dpi → **1280x800 dp liggend**,
|
|
`emulator-5556` is 2560x1600 @ 320dpi → **1280x800 dp liggend**,
|
|
|
**800x1280 dp staand** (rotatie zit op `USER_ROTATION_LOCKED`; staand
|
|
**800x1280 dp staand** (rotatie zit op `USER_ROTATION_LOCKED`; staand
|
|
|
testen kan met `adb -s emulator-5556 shell wm size 1600x2560`, daarna
|
|
testen kan met `adb -s emulator-5556 shell wm size 1600x2560`, daarna
|
|
|
-`wm size reset`). Telefoon-referentie `emulator-5554`: 1080x1920 @
|
|
|
|
|
-420dpi → **411x731 dp**. Een tablet zit dus altijd in de bovenste twee
|
|
|
|
|
-breekpunt-treden, een telefoon altijd in de onderste.
|
|
|
|
|
|
|
+`wm size reset`). Telefoon-referentie: 1080x1920 @ 420dpi → **411x731 dp**.
|
|
|
|
|
|
|
|
**1. Horeca-overzicht (gemeente én provincie) — al goed, niets doen.**
|
|
**1. Horeca-overzicht (gemeente én provincie) — al goed, niets doen.**
|
|
|
-Beide pagina's gebruiken een `MasonryGridView` met een responsieve
|
|
|
|
|
-`crossAxisCount` (1 / 1 / 2 / 3 per breekpunt, o.a.
|
|
|
|
|
-`horecagelegenheden_overzicht_widget.dart:598`). Op tablet staand geeft
|
|
|
|
|
-dat 2 kolommen, liggend 3. Dit is meteen het na te volgen patroon voor
|
|
|
|
|
-punt 2.
|
|
|
|
|
-
|
|
|
|
|
-**2. Home — dit is het echte werk.** De 5 tabs bouwen hun kaarten met
|
|
|
|
|
-`List.generate` in een gewone `Column` binnen een
|
|
|
|
|
-`SingleChildScrollView` (`home_widget.dart`, o.a. regels 314/338/375/
|
|
|
|
|
-412/449) — **geen grid, dus altijd één kolom, op elk schermformaat**.
|
|
|
|
|
-Live bevestigd: op 800 dp staand is elke kaart volle breedte met de
|
|
|
|
|
-rechterhelft grotendeels leeg. De kaart zelf
|
|
|
|
|
-(`home_uitgaantabel_kaart_component_widget.dart:230`) is een `Row` van
|
|
|
|
|
-`Expanded(flex: 3)` (foto) en `Expanded(flex: 6)` (tekst), met een
|
|
|
|
|
-responsieve vaste hoogte (160/200/240/280 dp, regel 198) — de hoogte
|
|
|
|
|
-schaalt dus wél mee met het breekpunt, de kolomindeling niet. Daardoor
|
|
|
|
|
-wordt de kaart op tablet zowel breder als hoger terwijl de tekst
|
|
|
|
|
-gelijk blijft.
|
|
|
|
|
-*Fix:* de `Column` per tab omzetten naar een grid met dezelfde
|
|
|
|
|
-responsieve `crossAxisCount` als punt 1. **Gebruik rechtsklik →
|
|
|
|
|
-"Replace", nooit "Wrap Widget" + "Remove Widget"** — zie de
|
|
|
|
|
-`CLAUDE.md`-notitie: die tweede route sloopt de `List.generate`-binding
|
|
|
|
|
-zonder foutmelding. Na afloop verifiëren dat `List.generate(` nog in de
|
|
|
|
|
-export staat.
|
|
|
|
|
-
|
|
|
|
|
-**3. Favorieten — kleine correctie, geen herbouw.**
|
|
|
|
|
|
|
+Beide gebruiken een `MasonryGridView` met responsieve `crossAxisCount`
|
|
|
|
|
+(1/1/2/3 per breekpunt, o.a. `horecagelegenheden_overzicht_widget.dart:598`).
|
|
|
|
|
+Dit is meteen het na te volgen patroon.
|
|
|
|
|
+
|
|
|
|
|
+**2. Home — gecorrigeerde diagnose. Zit NIET op de Home-pagina zelf.**
|
|
|
|
|
+Een eerdere lezing van deze taak ging ervan uit dat Home's tabs hun
|
|
|
|
|
+kaarten met `List.generate` in een `Column` bouwen. **Dat klopt niet:**
|
|
|
|
|
+de `Column` per tab bevat precies één kind, namelijk het component
|
|
|
|
|
+`HomeUitgaantabelKaartComponent`. De kaartenlijst wordt *binnen* dat
|
|
|
|
|
+component gebouwd, door een **`PagedListView`**
|
|
|
|
|
+(`home_uitgaantabel_kaart_component_widget.dart:132`) met infinite
|
|
|
|
|
+scroll. Dáár moet de kolomindeling dus veranderen — en dat is gunstig:
|
|
|
|
|
+één wijziging raakt alle 5 de tabs tegelijk (het component wordt
|
|
|
|
|
+alleen door `home_widget.dart` gebruikt, 5x).
|
|
|
|
|
+
|
|
|
|
|
+*(Getest en teruggedraaid op 2026-08-31: de `Column` op Home omzetten
|
|
|
|
|
+naar een `StaggeredView` via rechtsklik → Replace werkt technisch prima
|
|
|
|
|
+— geen "Invalid Action", het kind blijft behouden — maar levert alleen
|
|
|
|
|
+`itemCount: 1` op, dus functioneel een no-op. Volledig teruggedraaid en
|
|
|
|
|
+met een verse export bevestigd byte-identiek aan het origineel. Let op
|
|
|
|
|
+bij een Replace: de **Scrollable**-instelling van de `Column` gaat
|
|
|
|
|
+verloren en moet handmatig terug.)*
|
|
|
|
|
+
|
|
|
|
|
+**3. BLOKKADE op stap 2 — besluit van Bob nodig.** Rechtsklik → Replace
|
|
|
|
|
+op de `ListView` weigert met een expliciete, informatieve melding:
|
|
|
|
|
+> "Can't replace a widget that has pagination enabled. Go to the
|
|
|
|
|
+> 'Backend Query' pane and remove pagination before proceeding."
|
|
|
|
|
+
|
|
|
|
|
+Pagination weghalen en weer opbouwen raakt het datapad van de
|
|
|
|
|
+startpagina. **Huidige configuratie, uitgelezen en hier vastgelegd
|
|
|
|
|
+zodat ze exact te herstellen is** (Backend Query-paneel + de export):
|
|
|
|
|
+- Query Type **API Call**, call **`homeTabel`**
|
|
|
|
|
+- **Enable Infinite Scroll: aan**; variabele `page` → Value =
|
|
|
|
|
+ **Next Page Number** (genereert
|
|
|
|
|
+ `HomeTabelCall.call(page: nextPageMarker.nextPageNumber)`)
|
|
|
|
|
+- **Enable Pull to Refresh: aan** (genereert `onRefresh` +
|
|
|
|
|
+ `waitForOnePageForListView()`)
|
|
|
|
|
+- Twee eigen laadindicatoren (first page én next page):
|
|
|
|
|
+ `SpinKitFadingCircle`, kleur **`#B1061E`**, size **80**
|
|
|
|
|
+- Verder: `shrinkWrap: true`, `reverse: false`, `Axis.vertical`
|
|
|
|
|
+
|
|
|
|
|
+Het risico zit niet in de grid-omzetting zelf maar in het opnieuw
|
|
|
|
|
+opbouwen van die vijf instellingen — vooral de twee custom
|
|
|
|
|
+laadindicatoren — op de live Home-datastroom. **Vangnet staat klaar:**
|
|
|
|
|
+`HomeUitgaantabelKaartComponentCopy` is een complete, onbeschadigde
|
|
|
|
|
+kopie van dit component (aangemaakt 2026-08-31, vóór alle wijzigingen).
|
|
|
|
|
+
|
|
|
|
|
+*Twee opties, aan Bob:*
|
|
|
|
|
+- **(a) doorzetten** — pagination uit, `ListView` → `GridView`,
|
|
|
|
|
+ `Cross Axis Count` responsief 1/1/2/3 (via het icoontje naast het
|
|
|
|
|
+ veld → Source **"Responsive Value"**; dat bouwt de 4-traps if/else
|
|
|
|
|
+ zelf, bevestigd werkend deze sessie), daarna alle vijf instellingen
|
|
|
|
|
+ hierboven terugzetten en met een verse export controleren dat
|
|
|
|
|
+ `PagedGridView` + `nextPageNumber` + beide `SpinKitFadingCircle`-
|
|
|
|
|
+ blokken er weer staan.
|
|
|
|
|
+- **(b) kleinere ingreep zonder pagination aan te raken** — de kaart
|
|
|
|
|
+ een maximumbreedte geven en centreren. Lost de onleesbaar lange
|
|
|
|
|
+ regels op, maar geeft geen twee kolommen.
|
|
|
|
|
+
|
|
|
|
|
+**4. Favorieten — kleine correctie, los van het bovenstaande.**
|
|
|
`favorieten_widget.dart:339` en `:663` hebben `crossAxisCount: 2`
|
|
`favorieten_widget.dart:339` en `:663` hebben `crossAxisCount: 2`
|
|
|
-**hardgecodeerd**. Op tablet blijft het dus bij 2 kolommen waar 3 zou
|
|
|
|
|
-passen, en op telefoon staan er 2 naast elkaar in een kaart die op
|
|
|
|
|
-volle breedte ontworpen is. Zet dit om naar dezelfde responsieve
|
|
|
|
|
-uitdrukking als punt 1.
|
|
|
|
|
-
|
|
|
|
|
-**4. De sliderband is géén tabletprobleem — het lichtroze vlak
|
|
|
|
|
-eromheen is opgelost (2026-08-31: fill- en randkleur van de container
|
|
|
|
|
-op `home_widget.dart` gewist).** Wat wel
|
|
|
|
|
|
|
+**hardgecodeerd**. Zet dit om naar dezelfde responsieve uitdrukking als
|
|
|
|
|
+punt 1. Geen pagination in de weg hier.
|
|
|
|
|
+
|
|
|
|
|
+**5. De sliderband is géén tabletprobleem — zie P1-38.** Wat wel
|
|
|
tablet-specifiek is: `viewportFraction: 0.75`
|
|
tablet-specifiek is: `viewportFraction: 0.75`
|
|
|
(`home_uitgaan_slider_component_widget.dart:287` en
|
|
(`home_uitgaan_slider_component_widget.dart:287` en
|
|
|
-`p_uitgaan_slider_component_widget.dart:280`) betekent op 1280 dp een
|
|
|
|
|
-kaart van 960 dp breed — één enorme kaart per scherm. Dat verdient
|
|
|
|
|
-dezelfde breekpunt-behandeling (bv. 0.75 / 0.5 / 0.35).
|
|
|
|
|
-
|
|
|
|
|
-*Screenshots van deze meting staan in de sessie-scratchpad en zijn niet
|
|
|
|
|
-bewaard; opnieuw maken kost twee minuten met de `wm size`-truc
|
|
|
|
|
-hierboven.*
|
|
|
|
|
|
|
+`p_uitgaan_slider_component_widget.dart:280`) geeft op 1280 dp een
|
|
|
|
|
+kaart van 960 dp breed. Verdient dezelfde breekpunt-behandeling
|
|
|
|
|
+(bv. 0.75 / 0.5 / 0.35), maar pas ná P1-38.
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
|
|
-**P1-37 · Eigenaar: Claude of Bob (1 conditie).** De Home-kaart toont
|
|
|
|
|
-letterlijk de tekst **`null`** wanneer een evenement geen
|
|
|
|
|
-beschrijving heeft. Live gezien op 2026-08-31 op de Home-pagina, tab
|
|
|
|
|
-"Uitgaan", kaart "Micha Wertheim" — de regel onder de datum leest
|
|
|
|
|
-`null`.
|
|
|
|
|
-
|
|
|
|
|
-Oorzaak is het bekende patroon uit P1-6/P1-15: in
|
|
|
|
|
-`home_uitgaantabel_kaart_component_widget.dart:657-662` staat een kale
|
|
|
|
|
-`Expanded(child: Text(getJsonField(evenementenItem, r'''$.inhoud''')
|
|
|
|
|
-.toString(), ...))` zonder guard — `.toString()` op `null` levert de
|
|
|
|
|
-string `"null"`. **Dit is een andere plek dan het al bekende geval:**
|
|
|
|
|
-P1-15 punt 3 gaat over `UitgaantabelKaartWidget`'s
|
|
|
|
|
-`widget!.inhoud!.toString()`, een ander component. Deze zit op de
|
|
|
|
|
-startpagina van de app en is dus zichtbaarder.
|
|
|
|
|
-
|
|
|
|
|
-*Fix:* zelfde recept als P1-15 punt 3 — Visibility → Conditional op de
|
|
|
|
|
-`Text`-node, First Value = de rauwe `$.inhoud`-binding, operator
|
|
|
|
|
-**"Is Set"**, geen Second Value (dat vermijdt de bekende tweede-dialoog-
|
|
|
|
|
-freeze). Let op de `CLAUDE.md`-waarschuwing dat "Is Set and Not Empty"
|
|
|
|
|
-op een JSON-Path-binding tegen een raw loop-item **niet** beschikbaar
|
|
|
|
|
-is — "Is Set" is hier de haalbare optie.
|
|
|
|
|
-
|
|
|
|
|
-*Zelfde component, nog niet live waargenomen maar identiek onbeschermd:*
|
|
|
|
|
-`$.titel` (:385), `$.horecagelegenheid` (:442), `$.adres` (:497),
|
|
|
|
|
-`$.plaats` (:566), `$.datum` (:618). Meepakken als de conditie-route
|
|
|
|
|
-eenmaal werkt.
|
|
|
|
|
|
|
+**P1-38 · Eigenaar: Bob (1 kleurwaarde) — past bij het P1-32/P1-33-
|
|
|
|
|
+kleurwerk.** Rond de slider op de Home-pagina staat een **lichtroze
|
|
|
|
|
+vlak met een grijze rand**, zichtbaar op élk schermformaat (bevestigd
|
|
|
|
|
+op zowel telefoon- als tabletformaat, 2026-08-31).
|
|
|
|
|
+
|
|
|
|
|
+`home_widget.dart:187-195`:
|
|
|
|
|
+```
|
|
|
|
|
+Container(
|
|
|
|
|
+ height: 250.0,
|
|
|
|
|
+ decoration: BoxDecoration(
|
|
|
|
|
+ color: Color(0xFFF5A2A2),
|
|
|
|
|
+ border: Border.all(color: Color(0xFFCAC3C3), width: 2.0),
|
|
|
|
|
+ ),
|
|
|
|
|
+```
|
|
|
|
|
+`#F5A2A2` en `#CAC3C3` komen in geen van beide merkpaletten voor (zie
|
|
|
|
|
+het merk-DNA in `CLAUDE.md`: #9A141D, #FF680D, #3E454C, #09B34A,
|
|
|
|
|
+#F2F2F2) en staan ook niet in `flutter_flow_theme.dart`. Ziet eruit als
|
|
|
|
|
+een achtergebleven hulpkleur om de slider-container zichtbaar te maken
|
|
|
|
|
+tijdens het bouwen. Omdat de carousel-kaarten de vaste hoogte van 250
|
|
|
|
|
+dp niet vullen, is het vlak er duidelijk omheen te zien.
|
|
|
|
|
+
|
|
|
|
|
+*Fix:* de `Fill Color` van deze container op transparant zetten (of op
|
|
|
|
|
+`#F2F2F2` als er bewust een rustvlak achter de slider moet), en de
|
|
|
|
|
+2px-rand weghalen. Eén widget, één eigenschap.
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
|
|
|
|
+**Minor-3 · Eigenaar: Bob — even zelf nakijken (gevonden 2026-08-31 door
|
|
|
|
|
+Claude, in een verse export; niet door Claude veroorzaakt).** In de
|
|
|
|
|
+huidige builder-staat van `HorecagelegenheidCurrent` staat de AppBar op
|
|
|
|
|
+`automaticallyImplyLeading: true` (was `false` in de laatst gecommitte
|
|
|
|
|
+code). Volgens het bestaande `CLAUDE.md`-patroon geeft dat een
|
|
|
|
|
+**tweede, overbodige hamburger-knop** naast de knop die
|
|
|
|
|
+`HeaderButtonsComponent` zelf al bevat. Waarschijnlijk een neveneffect
|
|
|
|
|
+van het lopende kleurwerk op diezelfde AppBar (`iconTheme` ging in
|
|
|
|
|
+dezelfde wijziging van `Color(0xFFB12727)` naar
|
|
|
|
|
+`FlutterFlowTheme.of(context).secondary`). Fix indien bevestigd:
|
|
|
|
|
+AppBar-node → Visibility → **"Show Default Button" uit**.
|
|
|
|
|
|