Forráskód Böngészése

P1-41 helft 1: categorietags zijn overal rechte blokjes

Border radius 12 -> 0 op het gedeelde lib/shared/tag_categorie_component/,
dat door alle kaartcomponenten gebruikt wordt. Akkoord van Bob, juist omdat
het app-breed doorwerkt en aansluit bij het merk (de site gebruikt rechte
groene blokjes, geen pillen).

TASKS.md: P2-15 en P1-41 bijgewerkt en beide bezig-claims vrijgegeven.
P2-15 is op de live test na af; P1-41 helft 2 (labels van de afbeelding af)
staat er nu zelfstandig uitgeschreven in, inclusief de structuur van de drie
kaartcomponenten die het nog nodig hebben.

CLAUDE.md: twee valkuilen erbij - de component-naam die per ongeluk
overschreven wordt bij typen in het rechterpaneel (opnieuw opgetreden), en
een slider-getalveld dat de oude waarde blijft tonen terwijl de slider en
de export al kloppen.

Bevat ook Bob's gelijktijdige werk aan mijnProfiel en de sliders.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 1 hete
szülő
commit
3070a0f0b6

+ 14 - 1
CLAUDE.md

@@ -1156,6 +1156,14 @@ een verse Inline Function aanmaken lukt in de UI, maar Confirm schrijft
 "ziet-er-opgeslagen-uit"-patroon als elders. Dan is de knop/actie
 weggooien en opnieuw opbouwen sneller dan doorprobéren.
 
+**Een slider-met-getalveld (Border Radius, Opacity, Elevation …) toont ná het
+typen vaak nog de OUDE waarde in het getalveld terwijl de slider al klopt —
+geloof de slider, niet het getal, en verifieer met een export.** Bevestigd
+2026-09-03 op `tagCategorieComponent`'s Border Radius: veld bleef `12` tonen
+(ook na de node te herselecteren), slider stond links op 0, en de verse export
+gaf `BorderRadius.circular(0.0)`. Niet nog een keer typen dus — dat riskeert
+juist een verkeerde waarde.
+
 **Tekstschaduw van een `Text`/`AutoSizeText` verwijderen:** widget
 selecteren → sectie **"Shadows"** onderaan Text Properties → klik op de
 rij **"Shadow 1"** (niet op het chevron) → er verschijnt rechts in
@@ -1309,7 +1317,12 @@ werd zo hernoemd naar `color`, zichtbaar aan de URL die omsloeg naar
 component-root in de tree selecteren → naamveld → triple-click → juiste
 naam typen → Return; een verse export laat daarna weer de originele
 bestands-, map- én klassenaam zien (FlutterFlow leidt die allemaal af
-van de componentnaam, er blijft niets achter). **Voorkomen:** vóór je in
+van de componentnaam, er blijft niets achter). **Herhaald opgetreden 2026-09-03** op `tagCategorieComponent`: een
+klik op "Search properties..." landde op het naamveld en de zoekterm "radius"
+maakte er `tagCategorieCompradiusonent` van. Herstel kostte twee handelingen en
+geen data. **Vuistregel die dit definitief voorkomt: klik eerst het
+kind-widget in de tree aan (dan is de component-root niet meer geselecteerd) en
+typ pas daarna in het rechterpaneel.** **Voorkomen:** vóór je in
 het rechterpaneel typt altijd eerst een `zoom` op de paneelkop
 (regio ±[970,30,1148,130]) om te bevestigen dát het gewenste widget
 geselecteerd is — de widgetnaam staat daar bovenaan. Vlak na

+ 41 - 2
TASKS.md

@@ -2068,7 +2068,7 @@ in Drupal, geen uitputtende audit.
 
 ---
 
-**P1-41 · Eigenaar: Claude — bezig (sessie 2026-09-03b).** De kaarten van
+**P1-41 · Eigenaar: Claude** (helft 1 af, helft 2 open — vrij op te pakken). De kaarten van
 `HomeUitgaantabelKaartComponent` hadden dezelfde ontwerpfout die P1-36 op de
 horeca-overzichtskaart oploste: twee groene categoriepillen liggen linksonder
 óver de afbeelding (donkerste hoek, slecht leesbaar), als pil i.p.v. recht
@@ -2099,6 +2099,37 @@ onder deze taak. **Wél levend:**
 2. `PUitgaanSliderKaartComponent` — Home-slider én PUitgaan-slider;
 3. `UitgaantabelKaart` — Favorieten tab 1.
 
+**Concreet per component (structuur uitgezocht 2026-09-03b, regelnummers uit
+de export van die dag — controleer ze, ze schuiven bij elke export):**
+- `home_uitgaantabel_kaart_component_widget.dart` — `Stack` (r250) met twee
+  kinderen: `Align(0.0, 1.0)` = de afbeelding (r252) en `Align(-0.92, 0.76)` =
+  de tags (r302, `Wrap` > `List.generate` > `TagCategorieComponentWidget`). De
+  tekstkolom staat ná de Stack in `Align(-1.0, 0.0) > Column` (r384).
+- `uitgaantabel_kaart_widget.dart` — identiek patroon: `Stack` (r185),
+  afbeelding `Align(0.0, 1.0)` (r187), tags `Align(-0.92, 0.76)` (r227),
+  tekstkolom `Align(-1.0, 0.0) > Column` (r299).
+- `p_uitgaan_slider_kaart_component_widget.dart` — wijkt af: `Stack` (r138)
+  met afbeelding `Align(1.0, 0.0)` (r140) en tags `Align(1.0, 1.0)` (r169);
+  de tags zitten hier rechtsonder, en élk los label heeft binnen de `Wrap` nóg
+  een eigen `Align(1.0, 1.0)` (r204). De tekstkolom staat verderop (r249).
+
+**Werkwijze:** sleep in de Widget Tree de tag-`Align` (met zijn hele subtree)
+uit de `Stack` naar de tekst-`Column` eronder. Let op het deterministische
+insert-gedrag uit `CLAUDE.md`: een drop op een container-rij zet de node
+**altijd als eerste kind** — wil je 'm onderaan, drop dan de siblings ná hem
+opnieuw op de ouder in omgekeerde volgorde. Klap de te verslepen node eerst in
+(chevron), anders passen bron en doel niet samen in beeld (het boompaneel
+scrollt niet met het muiswiel). Is de omhullende `Align` daarna alleen nog
+uitlijning: rechtsklik → **Remove Widget** tilt de kinderen een niveau omhoog.
+**Verifieer na élk component met een verse export dat `List.generate(...)` en
+de `categorieTag`-binding nog staan** — dat is precies wat bij een verkeerde
+Wrap/Remove-volgorde stilletjes sneuvelt.
+
+**Bijvangst die tegelijk kan:** op smalle kaarten breekt "Kindvriendelijk"
+midden in het woord af. Zodra de labels onder de tekst staan (volle
+kaartbreedte i.p.v. de halve breedte naast de foto) is dat waarschijnlijk al
+opgelost; check het op telefoonformaat vóór je er extra werk in steekt.
+
 De horeca-overzichtskaart uit P1-36 gebruikt dit gedeelde component
 **niet** (die had een eigen inline groene Container), dus die is met de
 fix van 2026-09-03 al klaar en verandert hier niet door mee.
@@ -2737,7 +2768,15 @@ overwegen bij een volgende theme-update:
 
 ---
 
-**P2-15 · Eigenaar: Claude — bezig (sessie 2026-09-03b, bouwstap 5 afmaken op `uitgaansevenementAanmaken`: argumenten `evenementCreate` binden, horeca-dropdown, tickets-URL, page state, page parameter. Werkt zelf in de builder, Bob kijkt mee).
+**P2-15 · Eigenaar: Onbepaald — bouwstappen 1 t/m 5 zijn AF; alleen de live
+test rest.** (Claim vrijgegeven na sessie 2026-09-03b.) Wat er nog moet: één
+doorloop op een toestel — inloggen als horeca-eigenaar, `mijnProfiel` openen,
+via "+ Voeg toe" naar `uitgaansevenementAanmaken`, controleren dat de
+horeca-dropdown zich voorselecteert (bij precies 1 zaak) en dat de verzendknop
+verschijnt, en één evenement echt indienen. Verwacht: snackbar "Je evenement is
+geplaatst." en de node terugvinden op uitgaanskrant.com. Doe dat met
+`fvm flutter run --profile -d <device>` (zie CLAUDE.md), niet met een
+debug-build.
 Bouwstap 1 afgerond en bevestigd (2026-08-27): custom action
 `bestandUpload` (`lib/custom_code/actions/bestand_upload.dart`) upload
 foto → fid, live getest tegen productie

+ 4 - 4
ios/Runner.xcodeproj/project.pbxproj

@@ -49,8 +49,8 @@
 		97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
 		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
-		6436409927A31CD600820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		6436409827A31CD400820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409327A31CDC00820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409E27A31CDB00820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		A9C17DEFA21738E5FBD7F54A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
 		B8285832C7E7A3262A5A897C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -317,8 +317,8 @@
 		6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
 			isa = PBXVariantGroup;
 			children = (
-				6436409927A31CD600820AF7 /* nl */,
-				6436409827A31CD400820AF7 /* en */,
+				6436409327A31CDC00820AF7 /* nl */,
+				6436409E27A31CDB00820AF7 /* en */,
 			);
 			name = InfoPlist.strings;
 			sourceTree = "<group>";

+ 1 - 0
lib/mijn_profiel/mijn_profiel_model.dart

@@ -4,6 +4,7 @@ import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/horecagelegenhedenoverzicht/horecagelegenheidoverzicht_kaart/horecagelegenheidoverzicht_kaart_widget.dart';
 import 'dart:ui';
+import '/index.dart';
 import 'mijn_profiel_widget.dart' show MijnProfielWidget;
 import 'package:flutter/material.dart';
 import 'package:flutter_spinkit/flutter_spinkit.dart';

+ 8 - 11
lib/mijn_profiel/mijn_profiel_widget.dart

@@ -4,6 +4,7 @@ import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/horecagelegenhedenoverzicht/horecagelegenheidoverzicht_kaart/horecagelegenheidoverzicht_kaart_widget.dart';
 import 'dart:ui';
+import '/index.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_spinkit/flutter_spinkit.dart';
 import 'package:google_fonts/google_fonts.dart';
@@ -140,18 +141,14 @@ class _MijnProfielWidgetState extends State<MijnProfielWidget> with RouteAware {
                     ),
                     FFButtonWidget(
                       onPressed: () async {
-                        ScaffoldMessenger.of(context).showSnackBar(
-                          SnackBar(
-                            content: Text(
-                              'Binnenkort beschikbaar: evenement aanmaken',
-                              style: TextStyle(
-                                color: FlutterFlowTheme.of(context).primaryText,
-                              ),
+                        context.pushNamed(
+                          UitgaansevenementAanmakenWidget.routeName,
+                          queryParameters: {
+                            'horecagelegenheidNid': serializeParam(
+                              '',
+                              ParamType.String,
                             ),
-                            duration: Duration(milliseconds: 4000),
-                            backgroundColor:
-                                FlutterFlowTheme.of(context).secondary,
-                          ),
+                          }.withoutNulls,
                         );
                       },
                       text: FFLocalizations.of(context).getText(

+ 1 - 1
lib/shared/tag_categorie_component/tag_categorie_component_widget.dart

@@ -99,7 +99,7 @@ class _TagCategorieComponentWidgetState
       child: Container(
         decoration: BoxDecoration(
           color: Color(0xFF09B34A),
-          borderRadius: BorderRadius.circular(12.0),
+          borderRadius: BorderRadius.circular(0.0),
           border: Border.all(
             color: Colors.white,
             width: 1.0,

+ 14 - 1
lib/uitgaanspaginas/home_uitgaan_slider_component/home_uitgaan_slider_component_widget.dart

@@ -284,7 +284,20 @@ class _HomeUitgaanSliderComponentWidgetState
                             options: CarouselOptions(
                               initialPage:
                                   max(0, min(1, homeslider.length - 1)),
-                              viewportFraction: 0.75,
+                              viewportFraction: () {
+                                if (MediaQuery.sizeOf(context).width <
+                                    kBreakpointSmall) {
+                                  return 0.75;
+                                } else if (MediaQuery.sizeOf(context).width <
+                                    kBreakpointMedium) {
+                                  return 0.75;
+                                } else if (MediaQuery.sizeOf(context).width <
+                                    kBreakpointLarge) {
+                                  return 0.5;
+                                } else {
+                                  return 0.35;
+                                }
+                              }(),
                               disableCenter: true,
                               enlargeCenterPage: true,
                               enlargeFactor: 0.25,

+ 4 - 4
lib/uitgaanspaginas/p_uitgaan_slider_component/p_uitgaan_slider_component_widget.dart

@@ -280,15 +280,15 @@ class _PUitgaanSliderComponentWidgetState
                         viewportFraction: () {
                           if (MediaQuery.sizeOf(context).width <
                               kBreakpointSmall) {
-                            return 0.0;
+                            return 0.75;
                           } else if (MediaQuery.sizeOf(context).width <
                               kBreakpointMedium) {
-                            return 0.0;
+                            return 0.75;
                           } else if (MediaQuery.sizeOf(context).width <
                               kBreakpointLarge) {
-                            return 0.0;
+                            return 0.5;
                           } else {
-                            return 0.0;
+                            return 0.35;
                           }
                         }(),
                         disableCenter: true,