Pārlūkot izejas kodu

Herstel kapotte $.logo-guard op HomeUitgaantabelKaartComponent + nieuwe custom action getFavorieteGemeenten

- home_uitgaantabel_kaart_component_widget.dart: de ConditionalBuilder-
  guard rond de event-carousel-afbeelding was buiten deze sessie om
  gewijzigd naar 'if (getJsonField(...))' zonder != null-vergelijking
  — dat compileert (dynamic omzeilt de statische check) maar crasht
  bij runtime ('type String is not a subtype of type bool') zodra
  $.logo een string is, dus bij vrijwel elk event mét logo. Op Bob's
  akkoord teruggezet naar de laatst-werkende 'Is Set'-conditie
  (genereert weer != null). Blur-hash-laadplaceholder van eerder deze
  sessie bleef intact.
- Nieuwe custom action getFavorieteGemeenten(List<String>?) ->
  List<GemeenteModelStruct>: loopt alle provincies langs (Provincies
  Call) en verzamelt per provincie (GemeentenCall) de gemeenten die in
  favorieteGemeenteIds voorkomen, voor de geplande snelkeuzelijst
  favoriete gemeenten op de select-provincie/gemeente-pagina. Nog niet
  aangesloten op UI.

Bevestigd via verse export + flutter analyze (0 errors, alleen
bestaande info/warning-lints) + volledige project-brede analyze
(0 errors).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bob 3 nedēļas atpakaļ
vecāks
revīzija
c6c34394d9

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

@@ -44,8 +44,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>"; };
-		6436409C27A31CD300820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		6436409227A31CD000820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409127A31CD300820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409D27A31CD100820AF7 /* 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>"; };
 /* End PBXFileReference section */
 
@@ -225,8 +225,8 @@
 		6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
 			isa = PBXVariantGroup;
 			children = (
-				6436409C27A31CD300820AF7 /* nl */,
-				6436409227A31CD000820AF7 /* en */,
+				6436409127A31CD300820AF7 /* nl */,
+				6436409D27A31CD100820AF7 /* en */,
 			);
 			name = InfoPlist.strings;
 			sourceTree = "<group>";

+ 46 - 0
lib/custom_code/actions/get_favoriete_gemeenten.dart

@@ -0,0 +1,46 @@
+// Automatic FlutterFlow imports
+import '/backend/schema/structs/index.dart';
+import '/flutter_flow/flutter_flow_theme.dart';
+import '/flutter_flow/flutter_flow_util.dart';
+import 'index.dart'; // Imports other custom actions
+import '/flutter_flow/custom_functions.dart'; // Imports custom functions
+import 'package:flutter/material.dart';
+// Begin custom action code
+// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
+
+import '/backend/api_requests/api_calls.dart';
+
+Future<List<GemeenteModelStruct>> getFavorieteGemeenten(
+    List<String>? favorieteGemeenteIds) async {
+  final resolved = <GemeenteModelStruct>[];
+  final ids = favorieteGemeenteIds ?? [];
+  if (ids.isEmpty) {
+    return resolved;
+  }
+  final provResponse = await ProvinciesCall.call();
+  if (!provResponse.succeeded) {
+    return resolved;
+  }
+  final provincies =
+      provResponse.jsonBody is List ? (provResponse.jsonBody as List) : [];
+  for (final prov in provincies) {
+    if (prov is! Map) continue;
+    final provincieId = prov['provincieid']?.toString();
+    if (provincieId == null || provincieId.isEmpty) continue;
+    final gemResponse = await GemeentenCall.call(provincieid: provincieId);
+    if (!gemResponse.succeeded) continue;
+    final gemeentes =
+        gemResponse.jsonBody is List ? (gemResponse.jsonBody as List) : [];
+    for (final g in gemeentes) {
+      if (g is! Map) continue;
+      final gid = g['gemeenteid']?.toString();
+      if (gid != null && ids.contains(gid)) {
+        final struct = GemeenteModelStruct.maybeFromMap(g);
+        if (struct != null) {
+          resolved.add(struct);
+        }
+      }
+    }
+  }
+  return resolved;
+}

+ 1 - 0
lib/custom_code/actions/index.dart

@@ -1,2 +1,3 @@
 export 'drupal_login.dart' show drupalLogin;
 export 'drupal_request.dart' show drupalRequest;
+export 'get_favoriete_gemeenten.dart' show getFavorieteGemeenten;