Ver Fonte

TASKS: herkomst van de Unique Key- en Primary Scroll-warnings

Uitgezocht: het leeuwendeel zit in dode kopie-paginas. Een aangeklikte Primary
Scroll-warning landt op mijnProfielCopy3, en de export bevestigt het: 12 van de
22 SingleChildScrollViews staan in wegwerp-code, en mijnProfiel is de enige
levende pagina die er ook lijsten in heeft. Advies is dus: eerst de 13 dode
paginas/componenten opruimen.

Inclusief uitleg waarom de meldingen ontstaan en het fix-recept per plek.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob há 1 dia atrás
pai
commit
219fe018a7
1 ficheiros alterados com 40 adições e 2 exclusões
  1. 40 2
      TASKS.md

+ 40 - 2
TASKS.md

@@ -54,8 +54,46 @@ geblokkeerd (alleen errors doen dat, en niet eens allemaal). Vijf soorten:
 | **Auth Page Setup** — *"Logged In Page and Entry Page cannot be the same"* | 1 | Beide staan op Home (`nav.dart`: `appStateNotifier.loggedIn ? HomeWidget() : HomeWidget()`). **Bewuste keuze** sinds 2026-09-04, zie `CLAUDE.md` — FlutterFlow's melding is generiek advies, geen fout |
 | **Custom Code Dependencies** — *"deprecated package flutter_html"* | 1 | `flutter_html` in `pubspec.yaml` (r. 65), gebruikt door de custom widget `FromHTML` |
 
-Niets hiervan blokkeert de livegang. Wil je de lijst echt leeg: de eerste twee
-groepen zijn het werk (36 Value Keys zetten, en de geneste scrollables opruimen).
+### Uitgezocht 2026-09-23: waar de twee grootste groepen vandaan komen
+
+**Het grootste deel zit in DODE kopie-paginas.** Een aangeklikte *Primary Scroll*-warning
+landde op **`mijnProfielCopy3`**, en de export bevestigt het patroon:
+
+| | levend | dood |
+|---|---|---|
+| component-instanties zonder Value Key | 29 | 7 |
+| `SingleChildScrollView` (de Primary-Scroll-bron) | 10 | 12 |
+
+Van de levende `SingleChildScrollView`s is **`mijnProfiel` de enige die ook lijsten bevat**
+(3 scrollende `Column`s met 5 `ListView.builder`s erin). **Alle andere Primary
+Scroll-warnings komen dus uit wegwerp-code**: `mijnProfielCopy`/`Copy2`/`Copy3`/`Copy4`,
+`home_copy`, `PUitgaanPageCopy`/`Copy2`/`Copy3`, `favorietenCopy`,
+`selectprovinciegemeenteCopy`, plus de componenten `FilterBalkComponentCopy`,
+`FilterBalkKanweg` en `FotoboekGridComponentCopy` — 13 stuks, die allemaal al op de
+opruimlijst staan (P2-7 / 114 / FOTOBOEK).
+
+**Advies: ruim eerst die 13 op.** Eén actie, nul risico voor levende code, en daarmee
+verdwijnt het leeuwendeel van beide groepen. Pas daarna is de rest de moeite waard.
+
+**Waarom de meldingen er staan**
+- *Unique Key*: Flutter koppelt een widget bij een rebuild aan zijn state via zijn `key`.
+  Zonder key matcht hij op positie+type, dus bij herordenen/filteren kan state bij het
+  verkeerde item belanden. ⚠️ Verwacht er geen functionele winst van: een Value Key op een
+  component-instantie **reset een gepagineerde lijst niet** (zie `CLAUDE.md`), en deze
+  kaarten hebben nauwelijks eigen state.
+- *Primary Scroll*: er is één `PrimaryScrollController` per route, en elke scrollable die
+  `primary` aan heeft claimt die. FlutterFlow zet **Primary standaard aan** bij elke `Column`
+  met *Scrollable*; zit daar een `ListView` in die dat ook doet, dan vechten ze erom.
+  Merkbaar bij scroll-restauratie en "tik op de statusbalk om omhoog te scrollen".
+
+**De fix (per plek):** widget selecteren -> rechterpaneel -> onder *Scrollable* de toggle
+**Primary** uit. Zet hem uit op de scrollable die **niet** de hoofdscroller is — bij een
+`ListView` met `shrinkWrap: true` in een scrollende `Column` is dat de ListView. Genereert
+`primary: false`; het enige bestaande voorbeeld in dit project staat in
+`EvenementInfo` (`SingleChildScrollView(primary: false)`).
+Voor *Unique Key*: instantie selecteren -> sectie **Value Key** (net boven *Component
+Properties*) -> binden aan het `nid` van het loop-item (JSON Path `$.nid`). 29x, dus fors
+werk voor weinig opbrengst.
 
 ## 👤 BOB — OPEN, in volgorde van wat de livegang blokkeert