|
|
@@ -45,7 +45,8 @@ Google Play en één doorloop die alleen Bob kan doen.
|
|
|
| **Drupal** | taak 56-restant · taak 28/109 | Cron-description op "xx days" ✅ gedaan · events zonder categorie gaat via de importer |
|
|
|
| **Bij livegang** | Schakelaars en opruimklussen | Eigen blok hieronder |
|
|
|
| ~~115~~ | ~~AdBanner verplaatsen~~ | ✅ **AF** (Bob 2026-09-20, export-geverifieerd): volgorde is nu slider → banner → filterbalk → lijst |
|
|
|
-| **116** | AdBanner springt bij het laden | ✅ Container + responsive hoogte staat goed. ⚠️ Eén restpunt: de oude `Padding(top 15)` zit nú **binnen** die Container en eet 15 van de 50 dp |
|
|
|
+| ~~116~~ | ~~AdBanner springt~~ | ✅ **AF** (Bob 2026-09-20): Container `65/65/105/105` mét de padding erin, dus de banner krijgt zijn volle 50 resp. 90 dp én de lucht tot de slider blijft |
|
|
|
+| **120** | 12 hardcoded kleuren aan thematokens binden | Alle 12 zijn exact gelijk aan een bestaand token, dus nu onzichtbaar — maar ze lopen niet mee bij een themawijziging. Eigen blok hieronder |
|
|
|
| ~~117~~ | ~~Kalenderpermissie eruit~~ | ✅ **AF** (Bob 2026-09-20, export-geverifieerd): `READ_CALENDAR`/`WRITE_CALENDAR` én `NSCalendarsUsageDescription` zijn weg; `CAMERA` staat er nog (terecht) |
|
|
|
| **118** | AdMob EU-consentbericht | ⚠️ Half: de FlutterFlow-toggle staat goed, maar het bericht moet in de **AdMob-console** gepubliceerd zijn. Eigen blok hieronder |
|
|
|
| **119** | Besluit: App Links voor `https://` | Gedeelde links openen nu altijd de browser, nooit de app. Post-launch keuze |
|
|
|
@@ -268,28 +269,39 @@ Verse export bevestigt de body-`Column` van `PUitgaanPage`:
|
|
|
`[slider (if !zoekOpen), Container > AdBanner, Expanded > FilterBalkComponent,
|
|
|
Expanded > lijst]`. Precies de gevraagde volgorde.
|
|
|
|
|
|
-### 116 · AdBanner-hoogte — ⚠️ één restpunt · Eigenaar: Bob
|
|
|
+### ~~116~~ · ✅ AdBanner-hoogte — AF (2026-09-20)
|
|
|
|
|
|
-**Gedaan en geverifieerd:** de `Container` staat er met `height` als Responsive
|
|
|
-Value `50 / 50 / 90 / 90`, en de AdBanner heeft **geen** eigen width/height meer
|
|
|
-(dus adaptive, zoals bedoeld). De layout springt hiermee niet meer.
|
|
|
+Eindstand in de export: `Container(height: 65/65/105/105) > Padding(top 15) >
|
|
|
+FlutterFlowAdBanner` zonder eigen width/height (dus adaptive). De banner houdt
|
|
|
+daarmee zijn volle 50 dp op telefoon en 90 dp op tablet over, en de 15 dp lucht
|
|
|
+tot de slider — die Bob er bewust in had gezet — blijft staan.
|
|
|
|
|
|
-⚠️ **Restpunt dat ik over het hoofd zag toen ik het recept gaf:** de oude
|
|
|
-`Padding(top: 15)` die om de banner zat, zit nu **binnen** die nieuwe Container.
|
|
|
-De Container geeft 50 dp, de padding pakt daar 15 van af, dus de banner houdt er
|
|
|
-**35** over terwijl hij er 50 wil. Constraints winnen van een gewenste hoogte, dus
|
|
|
-de advertentie wordt aan de onderkant afgeknepen — zonder foutmelding, en met test
|
|
|
-ads makkelijk over het hoofd te zien.
|
|
|
+🔸 De zwarte laadtekst van `FlutterFlowAdBanner` blijft hoger dan de Container en
|
|
|
+tekent dus even buiten zijn kader. Inherent aan de gegenereerde widget, niet vanuit
|
|
|
+de builder te clippen. De layout beweegt niet meer, en dat was het doel.
|
|
|
|
|
|
-**Kies er één:**
|
|
|
-- **Padding op 0** (de banner staat nu toch al los onder de slider), of
|
|
|
-- **hoogte op `65 / 65 / 105 / 105`** als je die 15 dp witruimte erboven wilt houden.
|
|
|
+### 120 · 12 hardcoded kleuren aan thematokens binden · Eigenaar: Bob
|
|
|
|
|
|
-🔸 Los daarvan blijft de zwarte laadtekst van `FlutterFlowAdBanner` hoger dan de
|
|
|
-Container en tekent dus even buiten zijn kader. Dat is inherent aan de gegenereerde
|
|
|
-widget en niet vanuit de builder te clippen; met test ads laadt hij snel genoeg om
|
|
|
-het niet te merken. De layout zelf beweegt niet meer, en dat was het doel.
|
|
|
+Gemeten op de verse export van 2026-09-20 (dode kopieën uitgefilterd). Dit is de
|
|
|
+staart van P1-33: daar is destijds het **rood** opgeruimd, grijs en groen bleven
|
|
|
+staan.
|
|
|
|
|
|
+| kleur | = token | aantal | waar |
|
|
|
+|---|---|---|---|
|
|
|
+| `Color(0xFFEEEEEE)` | **Alternate** | 9 | kaartranden op `uitgaansevenementAanmaken` (4) en `stadsactiviteitAanmaken` (5) |
|
|
|
+| `Color(0xFF09B34A)` | **Tertiary** | 2 | `HorecagelegenheidoverzichtKaart` + `tagCategorieComponent` (het groene categorielabel) |
|
|
|
+
|
|
|
+**Nu onzichtbaar** — de hexwaarden zijn exact gelijk aan de tokens, dus er verandert
|
|
|
+niets aan het beeld. Het punt is onderhoud: wijzig je ooit `alternate` of
|
|
|
+`tertiary` in Theme Settings, dan lopen deze elf plekken niet mee en krijg je twee
|
|
|
+tinten door elkaar.
|
|
|
+
|
|
|
+**Doen:** per widget het kleine **kleurblokje** vóór de kleurnaam aanklikken (niet
|
|
|
+de tekst — dan maak je er weer een hex van) → in "Choose a Color" onderaan de lijst
|
|
|
+**Theme Colors** → *Alternate* resp. *Tertiary*. Sluit met de X, niet met Escape
|
|
|
+(Escape laat de tree-selectie terugspringen naar de pagina-root).
|
|
|
+
|
|
|
+Geen haast, geen blokker — prima klusje voor tussendoor.
|
|
|
### ~~117~~ · ✅ Kalenderpermissie eruit — AF (2026-09-20)
|
|
|
|
|
|
Bob heeft Calendar uitgezet in App Settings → Permissions. Verse export bevestigt:
|
|
|
@@ -668,6 +680,29 @@ werkelijkheid gewoon events van vandaag waren die al begonnen waren — precies
|
|
|
het `>= -2 uur`-filter hoort weg te laten. Staat ook al in `CLAUDE.md`; ik trapte
|
|
|
er alsnog in.
|
|
|
|
|
|
+### Taak 116 · Sessie-verlopen-melding één keer visueel bevestigen · Eigenaar: Bob
|
|
|
+
|
|
|
+De 403-detectie (2026-09-20) is volledig geverifieerd op code- en serverniveau:
|
|
|
+export bevat alle onderdelen, `dart analyze` 0 errors, en productie antwoordt bij
|
|
|
+een ongeldige cookie met `403 ["Toegang geweigerd voor gebruiker anonymous"]` —
|
|
|
+precies wat `drupalRequest` detecteert. **Alleen nog niet met eigen ogen op een
|
|
|
+toestel gezien.** Geen aparte build voor starten; meenemen bij de eerstvolgende
|
|
|
+keer dat er toch een build draait.
|
|
|
+
|
|
|
+Test in drie stappen (~1 min):
|
|
|
+1. Log in de app in en open Favorieten (moet normaal laden).
|
|
|
+2. Wis de sessie server-side — vervang `<uid>` door je eigen uid:
|
|
|
+ ```
|
|
|
+ ssh aegir-o1 "drush @uitgaanskrant.com php-eval \"db_delete('sessions')->condition('uid', <uid>)->execute();\""
|
|
|
+ ```
|
|
|
+3. Ververs Favorieten in de app. Verwacht: rode balk *"Je sessie is verlopen. Log
|
|
|
+ opnieuw in."* met knop **Inloggen**, en de pagina klapt naar zijn uitgelogde
|
|
|
+ weergave.
|
|
|
+
|
|
|
+Werkt het niet, dan zit het in laag 2 (`VerbindingsBanner`), niet in de detectie —
|
|
|
+die is hierboven al bewezen. Controleer dan `adb logcat | grep "SESSIE VERLOPEN"`:
|
|
|
+staat die regel er wél, dan komt de melding niet door en is het de SnackBar-logica.
|
|
|
+
|
|
|
### Taak 115 · Autofill: wachtwoordmanager op de loginpagina · Eigenaar: Claude (Bob plant een losse sessie)
|
|
|
|
|
|
**Doel:** de gebruiker zijn inloggegevens door Android/iOS laten opslaan en
|