浏览代码

Verse FF-export 14 sep: standaard header+Drawer op 4 pagina's, provinciepagina null-veilig + Max Items 1000, horeca-grids gelijk, verbindingsbanner, datumvelden stadsactiviteit

Legt het builder-werk van 2026-09-14 vast dat nog niet in lib/ stond.
android/ bewust niet meegenomen: de export schrijft daar de oude
gradle-syntax terug die Flutter-tooling eerder gemigreerd had.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
bob 17 小时之前
父节点
当前提交
bf8e640270
共有 31 个文件被更改,包括 1471 次插入287 次删除
  1. 4 4
      ios/Runner.xcodeproj/project.pbxproj
  2. 18 0
      lib/app_state.dart
  3. 33 10
      lib/backend/api_requests/api_calls.dart
  4. 1 1
      lib/components/header_buttons_component_model.dart
  5. 18 3
      lib/components/header_buttons_component_widget.dart
  6. 49 0
      lib/custom_code/actions/check_verbinding.dart
  7. 1 0
      lib/custom_code/actions/index.dart
  8. 1 0
      lib/custom_code/widgets/index.dart
  9. 165 0
      lib/custom_code/widgets/verbindings_banner.dart
  10. 2 2
      lib/favorieten/favorieten_widget.dart
  11. 39 137
      lib/flutter_flow/internationalization.dart
  12. 0 37
      lib/flutter_flow/nav/nav.dart
  13. 50 13
      lib/horecagelegenhedenoverzicht/horecagelegenheden_overzicht_current/horecagelegenheden_overzicht_current_widget.dart
  14. 49 30
      lib/horecagelegenhedenoverzicht/horecagelegenheden_overzicht_provincie_page/horecagelegenheden_overzicht_provincie_page_widget.dart
  15. 0 6
      lib/index.dart
  16. 56 0
      lib/kanweg/header_buttons_component_copy/header_buttons_component_copy_model.dart
  17. 244 0
      lib/kanweg/header_buttons_component_copy/header_buttons_component_copy_widget.dart
  18. 18 1
      lib/mijn_profiel/mijn_profiel_model.dart
  19. 44 6
      lib/mijn_profiel/mijn_profiel_widget.dart
  20. 2 2
      lib/selecteer_plaats/select_state_drop_down_component/select_state_drop_down_component_widget.dart
  21. 18 0
      lib/stadsactiviteit_aanmaken/stadsactiviteit_aanmaken_model.dart
  22. 72 15
      lib/stadsactiviteit_aanmaken/stadsactiviteit_aanmaken_widget.dart
  23. 18 0
      lib/uitgaansevenement_aanmaken/uitgaansevenement_aanmaken_model.dart
  24. 66 12
      lib/uitgaansevenement_aanmaken/uitgaansevenement_aanmaken_widget.dart
  25. 6 4
      lib/uitgaanspaginas/home_uitgaan_slider_component/home_uitgaan_slider_component_widget.dart
  26. 92 0
      lib/uitgaanspaginas/home_uitgaan_slider_component_copy/home_uitgaan_slider_component_copy_model.dart
  27. 331 0
      lib/uitgaanspaginas/home_uitgaan_slider_component_copy/home_uitgaan_slider_component_copy_widget.dart
  28. 6 4
      lib/uitgaanspaginas/p_uitgaan_slider_component/p_uitgaan_slider_component_widget.dart
  29. 5 0
      lib/uitgaanspaginas/p_uitgaan_slider_kaart_component/p_uitgaan_slider_kaart_component_widget.dart
  30. 18 0
      lib/wachtwoord_vergeten/wachtwoord_vergeten_model.dart
  31. 45 0
      lib/wachtwoord_vergeten/wachtwoord_vergeten_widget.dart

+ 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>"; };
 		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>"; };
 		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>"; };
 		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
-		6436409127A31CD900820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		6436409427A31CDD00820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409427A31CD800820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409D27A31CD600820AF7 /* 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>"; };
 		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>"; };
 		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; };
 		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 */ = {
 		6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
 			isa = PBXVariantGroup;
 			isa = PBXVariantGroup;
 			children = (
 			children = (
-				6436409127A31CD900820AF7 /* nl */,
-				6436409427A31CDD00820AF7 /* en */,
+				6436409427A31CD800820AF7 /* nl */,
+				6436409D27A31CD600820AF7 /* en */,
 			);
 			);
 			name = InfoPlist.strings;
 			name = InfoPlist.strings;
 			sourceTree = "<group>";
 			sourceTree = "<group>";

+ 18 - 0
lib/app_state.dart

@@ -568,6 +568,14 @@ class FFAppState extends ChangeNotifier {
     debugLogAppState(this);
     debugLogAppState(this);
   }
   }
 
 
+  bool _geenVerbinding = false;
+  bool get geenVerbinding => _geenVerbinding;
+  set geenVerbinding(bool value) {
+    _geenVerbinding = value;
+
+    debugLogAppState(this);
+  }
+
   Map<String, DebugDataField> toDebugSerializableMap() => {
   Map<String, DebugDataField> toDebugSerializableMap() => {
         'userToken': debugSerializeParam(
         'userToken': debugSerializeParam(
           userToken,
           userToken,
@@ -785,6 +793,16 @@ class FFAppState extends ChangeNotifier {
               'reference=Ch4KFgoKYXBpQmFzZVVybBIIbnQ1cXFuZW5yAggDegBaCmFwaUJhc2VVcmw=',
               'reference=Ch4KFgoKYXBpQmFzZVVybBIIbnQ1cXFuZW5yAggDegBaCmFwaUJhc2VVcmw=',
           name: 'String',
           name: 'String',
           nullable: false,
           nullable: false,
+        ),
+        'geenVerbinding': debugSerializeParam(
+          geenVerbinding,
+          ParamType.bool,
+          link:
+              'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state',
+          searchReference:
+              'reference=CiIKGgoOZ2VlblZlcmJpbmRpbmcSCG55azcxaWgxcgIIBXoAWg5nZWVuVmVyYmluZGluZw==',
+          name: 'bool',
+          nullable: false,
         )
         )
       };
       };
 }
 }

+ 33 - 10
lib/backend/api_requests/api_calls.dart

@@ -117,13 +117,13 @@ class CategorieenCall {
 
 
 /// End productie Group Code
 /// End productie Group Code
 
 
-class FavorietenAgendaCall {
+class KANWEGFavorietenAgendaCall {
   static Future<ApiCallResponse> call({
   static Future<ApiCallResponse> call({
     String? sessionName = '',
     String? sessionName = '',
     String? sessid = '',
     String? sessid = '',
   }) async {
   }) async {
     return ApiManager.instance.makeApiCall(
     return ApiManager.instance.makeApiCall(
-      callName: 'FavorietenAgenda',
+      callName: 'KANWEGFavorietenAgenda',
       apiUrl:
       apiUrl:
           'https://uitgaanskrant.com/nl/flutterdrup/views/flutterfavorietenagenda.json?display_id=services_1',
           'https://uitgaanskrant.com/nl/flutterdrup/views/flutterfavorietenagenda.json?display_id=services_1',
       callType: ApiCallType.GET,
       callType: ApiCallType.GET,
@@ -181,10 +181,10 @@ class FavorietenAgendaCall {
       ));
       ));
 }
 }
 
 
-class FavorietenAgendaTESTKANWEGCall {
+class KANWEGFavorietenAgendaTESTKANWEGCall {
   static Future<ApiCallResponse> call() async {
   static Future<ApiCallResponse> call() async {
     return ApiManager.instance.makeApiCall(
     return ApiManager.instance.makeApiCall(
-      callName: 'FavorietenAgendaTESTKANWEG',
+      callName: 'KANWEGFavorietenAgendaTESTKANWEG',
       apiUrl:
       apiUrl:
           'https://uitgaanskrant.com/nl/cookie-testcda.php?display_id=services_1',
           'https://uitgaanskrant.com/nl/cookie-testcda.php?display_id=services_1',
       callType: ApiCallType.GET,
       callType: ApiCallType.GET,
@@ -396,6 +396,11 @@ class HomeSliderCall {
         response,
         response,
         r'''$[:].horecagelegenheidid''',
         r'''$[:].horecagelegenheidid''',
       ));
       ));
+  static List? items(dynamic response) => getJsonField(
+        response,
+        r'''$[:]''',
+        true,
+      ) as List?;
 }
 }
 
 
 class UitgaanstabelCall {
 class UitgaanstabelCall {
@@ -560,6 +565,11 @@ class UitgaanSliderCall {
         response,
         response,
         r'''$[:].horecagelegenheidid''',
         r'''$[:].horecagelegenheidid''',
       ));
       ));
+  static List? items(dynamic response) => getJsonField(
+        response,
+        r'''$[:]''',
+        true,
+      ) as List?;
 }
 }
 
 
 class EstablishmentInfoCall {
 class EstablishmentInfoCall {
@@ -876,16 +886,24 @@ class ProvinciesCall {
     );
     );
   }
   }
 
 
-  static String? provincieId(dynamic response) =>
-      castToType<String>(getJsonField(
+  static List<String>? provincieId(dynamic response) => (getJsonField(
         response,
         response,
         r'''$[:].provincieid''',
         r'''$[:].provincieid''',
-      ));
-  static String? provincieName(dynamic response) =>
-      castToType<String>(getJsonField(
+        true,
+      ) as List?)
+          ?.withoutNulls
+          .map((x) => castToType<String>(x))
+          .withoutNulls
+          .toList();
+  static List<String>? provincieName(dynamic response) => (getJsonField(
         response,
         response,
         r'''$[:].provinciename''',
         r'''$[:].provinciename''',
-      ));
+        true,
+      ) as List?)
+          ?.withoutNulls
+          .map((x) => castToType<String>(x))
+          .withoutNulls
+          .toList();
   static List<String>? provinciedescription(dynamic response) => (getJsonField(
   static List<String>? provinciedescription(dynamic response) => (getJsonField(
         response,
         response,
         r'''$[:].provinciedescription''',
         r'''$[:].provinciedescription''',
@@ -1054,6 +1072,11 @@ class HorecagelegenheidoverzichtCall {
         r'''$[:].categorie''',
         r'''$[:].categorie''',
         true,
         true,
       ) as List?;
       ) as List?;
+  static List? items(dynamic response) => getJsonField(
+        response,
+        r'''$[:]''',
+        true,
+      ) as List?;
 }
 }
 
 
 class RequestNewPasswordCall {
 class RequestNewPasswordCall {

+ 1 - 1
lib/components/header_buttons_component_model.dart

@@ -2,7 +2,7 @@ import '/flutter_flow/flutter_flow_icon_button.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
-import 'dart:ui';
+import '/custom_code/widgets/index.dart' as custom_widgets;
 import '/index.dart';
 import '/index.dart';
 import 'header_buttons_component_widget.dart' show HeaderButtonsComponentWidget;
 import 'header_buttons_component_widget.dart' show HeaderButtonsComponentWidget;
 import 'package:aligned_tooltip/aligned_tooltip.dart';
 import 'package:aligned_tooltip/aligned_tooltip.dart';

+ 18 - 3
lib/components/header_buttons_component_widget.dart

@@ -2,7 +2,7 @@ import '/flutter_flow/flutter_flow_icon_button.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
-import 'dart:ui';
+import '/custom_code/widgets/index.dart' as custom_widgets;
 import '/index.dart';
 import '/index.dart';
 import 'package:aligned_tooltip/aligned_tooltip.dart';
 import 'package:aligned_tooltip/aligned_tooltip.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
@@ -102,8 +102,15 @@ class _HeaderButtonsComponentWidgetState
 
 
     return Align(
     return Align(
       alignment: AlignmentDirectional(0.0, 0.0),
       alignment: AlignmentDirectional(0.0, 0.0),
-      child: Row(
-        mainAxisSize: MainAxisSize.max,
+      child: Wrap(
+        spacing: 0.0,
+        runSpacing: 0.0,
+        alignment: WrapAlignment.start,
+        crossAxisAlignment: WrapCrossAlignment.start,
+        direction: Axis.horizontal,
+        runAlignment: WrapAlignment.start,
+        verticalDirection: VerticalDirection.down,
+        clipBehavior: Clip.none,
         children: [
         children: [
           AlignedTooltip(
           AlignedTooltip(
             content: Padding(
             content: Padding(
@@ -237,6 +244,14 @@ class _HeaderButtonsComponentWidgetState
                   ),
                   ),
             ),
             ),
           ),
           ),
+          Container(
+            width: 2.0,
+            height: 2.0,
+            child: custom_widgets.VerbindingsBanner(
+              width: 2.0,
+              height: 2.0,
+            ),
+          ),
         ],
         ],
       ),
       ),
     );
     );

+ 49 - 0
lib/custom_code/actions/check_verbinding.dart

@@ -0,0 +1,49 @@
+// 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 'package:http/http.dart' as http;
+
+/// Kijkt of de server bereikbaar is en zet App State `geenVerbinding`.
+///
+/// Geeft true terug als de verbinding in orde is.
+///
+/// Bewust een HEAD-request op de site-root: die levert 0 bytes body op en
+/// antwoordt in ongeveer 60 ms, dus dit is verwaarloosbaar naast de gewone
+/// data-calls. We kijken alleen of de server antwoordt, niet wat hij zegt.
+Future<bool> checkVerbinding() async {
+  final basis = FFAppState().apiBaseUrl.trim().isEmpty
+      ? 'https://uitgaanskrant.com'
+      : FFAppState().apiBaseUrl.trim();
+
+  bool bereikbaar;
+  try {
+    final response =
+        await http.head(Uri.parse(basis)).timeout(const Duration(seconds: 6));
+    // Elke echte HTTP-reactie betekent dat we de server hebben bereikt.
+    // Alleen een 5xx rekenen we als 'niet bruikbaar'.
+    bereikbaar = response.statusCode < 500;
+  } catch (_) {
+    // Geen netwerk, DNS-fout, timeout, certificaatfout: allemaal 'geen verbinding'.
+    bereikbaar = false;
+  }
+
+  final nieuweWaarde = !bereikbaar;
+  if (FFAppState().geenVerbinding != nieuweWaarde) {
+    // update() roept notifyListeners() aan; zonder dat merkt de banner niets.
+    FFAppState().update(() {
+      FFAppState().geenVerbinding = nieuweWaarde;
+    });
+  }
+
+  return bereikbaar;
+}
+
+// Set your action name, define your arguments and return parameter,
+// and then add the boilerplate code using the `</>` button on the right!

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

@@ -5,3 +5,4 @@ export 'bestand_upload.dart' show bestandUpload;
 export 'stadsactiviteit_create.dart' show stadsactiviteitCreate;
 export 'stadsactiviteit_create.dart' show stadsactiviteitCreate;
 export 'fetch_alle_horecagelegenheden.dart' show fetchAlleHorecagelegenheden;
 export 'fetch_alle_horecagelegenheden.dart' show fetchAlleHorecagelegenheden;
 export 'evenement_create.dart' show evenementCreate;
 export 'evenement_create.dart' show evenementCreate;
+export 'check_verbinding.dart' show checkVerbinding;

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

@@ -1 +1,2 @@
 export 'from_h_t_m_l.dart' show FromHTML;
 export 'from_h_t_m_l.dart' show FromHTML;
+export 'verbindings_banner.dart' show VerbindingsBanner;

+ 165 - 0
lib/custom_code/widgets/verbindings_banner.dart

@@ -0,0 +1,165 @@
+// 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 widgets
+import '/custom_code/actions/index.dart'; // Imports custom actions
+import '/flutter_flow/custom_functions.dart'; // Imports custom functions
+import 'package:flutter/material.dart';
+// Begin custom widget code
+// DO NOT REMOVE OR MODIFY THE CODE ABOVE!
+
+// Set your widget name, define your parameter, and then add the
+// boilerplate code using the `</>` button on the right!
+
+import 'package:go_router/go_router.dart';
+// ⬇⬇⬇ PLAK VANAF HIER ⬇⬇⬇
+
+/// Toont een melding zodra de server onbereikbaar is.
+///
+/// Het widget zelf neemt **geen ruimte** in de layout in (`SizedBox.shrink`):
+/// de header van dit project zit in een `FlexibleSpaceBar.background` met een
+/// vaste hoogte, dus een balk die wél ruimte vraagt geeft daar gegarandeerd een
+/// RenderFlex-overflow. In plaats daarvan gaat de melding via de
+/// `ScaffoldMessenger` over de pagina heen. Daardoor kan het widget op één
+/// plek in de gedeelde header staan en werkt het op elke pagina.
+///
+/// Waarom een custom widget en geen Text met een Visibility-conditie: de
+/// widgets in dit project lezen App State via de singleton `FFAppState()`,
+/// niet via `context.watch`. Een gewone conditie zou dus pas opnieuw evalueren
+/// als er toevallig iets anders een rebuild veroorzaakt. Dit widget luistert
+/// zelf naar FFAppState.
+class VerbindingsBanner extends StatefulWidget {
+  const VerbindingsBanner({
+    super.key,
+    this.width,
+    this.height,
+    this.tekst,
+  });
+
+  final double? width;
+  final double? height;
+  final String? tekst;
+
+  @override
+  State<VerbindingsBanner> createState() => _VerbindingsBannerState();
+}
+
+class _VerbindingsBannerState extends State<VerbindingsBanner> {
+  // Statisch, dus gedeeld over alle instanties: bij doorklikken tussen
+  // pagina's wordt niet bij elke opbouw opnieuw een verzoek gedaan, en er
+  // verschijnt nooit meer dan één balk tegelijk.
+  static DateTime? _laatsteCheck;
+  static const Duration _minimaalTussenChecks = Duration(seconds: 20);
+  static bool _balkStaatAl = false;
+
+  bool _bezig = false;
+
+  @override
+  void initState() {
+    super.initState();
+    FFAppState().addListener(_bijStateWijziging);
+    WidgetsBinding.instance.addPostFrameCallback((_) async {
+      await _checkIndienNodig();
+      _werkBalkBij();
+    });
+  }
+
+  @override
+  void dispose() {
+    FFAppState().removeListener(_bijStateWijziging);
+    super.dispose();
+  }
+
+  void _bijStateWijziging() {
+    if (mounted) _werkBalkBij();
+  }
+
+  void _werkBalkBij() {
+    final messenger = ScaffoldMessenger.maybeOf(context);
+    if (messenger == null) return;
+
+    if (!FFAppState().geenVerbinding) {
+      if (_balkStaatAl) {
+        _balkStaatAl = false;
+        messenger.hideCurrentSnackBar();
+      }
+      return;
+    }
+
+    if (_balkStaatAl) return;
+    _balkStaatAl = true;
+    messenger
+        .showSnackBar(
+          SnackBar(
+            backgroundColor: FlutterFlowTheme.of(context).primary,
+            // Praktisch oneindig: de balk hoort te blijven staan zolang er
+            // geen verbinding is, niet na een paar seconden te verdwijnen.
+            duration: const Duration(days: 1),
+            content: Row(
+              mainAxisSize: MainAxisSize.max,
+              children: [
+                const Icon(Icons.cloud_off, color: Colors.white, size: 18.0),
+                const SizedBox(width: 8.0),
+                Expanded(
+                  child: Text(
+                    widget.tekst ?? 'Geen verbinding met uitgaanskrant.com',
+                    style: const TextStyle(color: Colors.white, fontSize: 13.0),
+                  ),
+                ),
+              ],
+            ),
+            action: SnackBarAction(
+              // Bewust een vast label: een SnackBar bouwt niet opnieuw op, dus
+              // een status-afhankelijke tekst blijft hangen op de stand van het
+              // moment waarop hij getoond werd.
+              label: 'Opnieuw',
+              textColor: Colors.white,
+              onPressed: _check,
+            ),
+          ),
+        )
+        .closed
+        .then((_) {
+      // Ook als de gebruiker hem zelf wegveegt, mag er later weer één komen.
+      _balkStaatAl = false;
+    });
+  }
+
+  Future<void> _checkIndienNodig() async {
+    final vorige = _laatsteCheck;
+    if (vorige != null &&
+        DateTime.now().difference(vorige) < _minimaalTussenChecks) {
+      return;
+    }
+    await _check(herlaadBijHerstel: false);
+  }
+
+  /// [herlaadBijHerstel] staat alleen aan bij een tik van de gebruiker.
+  /// Automatisch herladen zou een lus opleveren: de pagina bouwt het widget
+  /// opnieuw op, dat checkt weer, enzovoort.
+  Future<void> _check({bool herlaadBijHerstel = true}) async {
+    if (_bezig) return;
+    _bezig = true;
+    _laatsteCheck = DateTime.now();
+    bool bereikbaar = false;
+    try {
+      bereikbaar = await checkVerbinding();
+    } finally {
+      _bezig = false;
+    }
+    if (bereikbaar && herlaadBijHerstel && mounted) {
+      // De FutureBuilders op deze pagina zijn al klaar met een mislukte
+      // respons; alleen de balk weghalen laat een leeg scherm achter.
+      // Daarom de huidige route opnieuw opbouwen, zodat de data alsnog laadt.
+      final huidigePad = GoRouterState.of(context).uri.toString();
+      context.pushReplacement(huidigePad);
+    }
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    // Neemt bewust geen ruimte in: de melding gaat via de ScaffoldMessenger.
+    return const SizedBox.shrink();
+  }
+}

+ 2 - 2
lib/favorieten/favorieten_widget.dart

@@ -1037,7 +1037,7 @@ class _FavorietenWidgetState extends State<FavorietenWidget>
                                       StadsactiviteitAanmakenWidget.routeName);
                                       StadsactiviteitAanmakenWidget.routeName);
                                 },
                                 },
                                 text: FFLocalizations.of(context).getText(
                                 text: FFLocalizations.of(context).getText(
-                                  'fbl4ak2y' /* stadsactiviteit aanmaken */,
+                                  'fbl4ak2y' /* Stadsactiviteit aanmaken */,
                                 ),
                                 ),
                                 options: FFButtonOptions(
                                 options: FFButtonOptions(
                                   height: 40.0,
                                   height: 40.0,
@@ -1045,7 +1045,7 @@ class _FavorietenWidgetState extends State<FavorietenWidget>
                                       16.0, 0.0, 16.0, 0.0),
                                       16.0, 0.0, 16.0, 0.0),
                                   iconPadding: EdgeInsetsDirectional.fromSTEB(
                                   iconPadding: EdgeInsetsDirectional.fromSTEB(
                                       0.0, 0.0, 0.0, 0.0),
                                       0.0, 0.0, 0.0, 0.0),
-                                  color: FlutterFlowTheme.of(context).primary,
+                                  color: FlutterFlowTheme.of(context).secondary,
                                   textStyle: FlutterFlowTheme.of(context)
                                   textStyle: FlutterFlowTheme.of(context)
                                       .titleSmall
                                       .titleSmall
                                       .override(
                                       .override(

+ 39 - 137
lib/flutter_flow/internationalization.dart

@@ -478,7 +478,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
       'en': '',
       'en': '',
     },
     },
     'fbl4ak2y': {
     'fbl4ak2y': {
-      'nl': 'stadsactiviteit aanmaken',
+      'nl': 'Stadsactiviteit aanmaken',
       'en': 'Create city activity',
       'en': 'Create city activity',
     },
     },
     'vpqh55o7': {
     'vpqh55o7': {
@@ -601,12 +601,12 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
       'en': 'Search...',
       'en': 'Search...',
     },
     },
     'b6ndrvbq': {
     'b6ndrvbq': {
-      'nl': 'Option 1',
-      'en': '',
+      'nl': 'Optie 1',
+      'en': 'Option 1',
     },
     },
     '5wvybd3x': {
     '5wvybd3x': {
-      'nl': 'Option 2',
-      'en': '',
+      'nl': 'Optie 2',
+      'en': 'Option 2',
     },
     },
     '93nr01v9': {
     '93nr01v9': {
       'nl': 'Option 3',
       'nl': 'Option 3',
@@ -645,7 +645,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
       'en': '',
       'en': '',
     },
     },
     'sv5qajjt': {
     'sv5qajjt': {
-      'nl': 'Stadseditor',
+      'nl': 'Of kies zelf een plaats',
       'en': '',
       'en': '',
     },
     },
     'dqeuq7t8': {
     'dqeuq7t8': {
@@ -797,115 +797,6 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
       'en': 'Home',
       'en': 'Home',
     },
     },
   },
   },
-  // HorecagelegenhedenOverzichtCopy
-  {
-    '9h6jfdei': {
-      'nl': 'Activiteiten',
-      'en': 'Activiteiten',
-    },
-    'ndvhb9rw': {
-      'nl': 'TextField',
-      'en': '',
-    },
-    'pnygpwks': {
-      'nl': 'Cultuur',
-      'en': 'Cultuur',
-    },
-    'c7r33qpa': {
-      'nl': 'Eetgelegenheden',
-      'en': 'Eetgelegenheden',
-    },
-    '9q9aqxds': {
-      'nl': 'Overnachten',
-      'en': 'Overnachten',
-    },
-    'o3glxp3t': {
-      'nl': 'Uitgaan',
-      'en': 'Uitgaan',
-    },
-    'xxlt4qbt': {
-      'nl': 'Verhuur, catering',
-      'en': 'Verhuur, catering',
-    },
-    '3rvk9enz': {
-      'nl': 'Hello World',
-      'en': '',
-    },
-    '70csxto9': {
-      'nl': 'Home',
-      'en': '',
-    },
-  },
-  // HorecagelegenhedenOverzichtCopy2
-  {
-    'v7zmfnlu': {
-      'nl': 'Activiteiten',
-      'en': 'Activiteiten',
-    },
-    'sisrkw2v': {
-      'nl': 'TextField',
-      'en': '',
-    },
-    '0wd3zzb2': {
-      'nl': 'Cultuur',
-      'en': 'Cultuur',
-    },
-    '06l3k6we': {
-      'nl': 'Eetgelegenheden',
-      'en': 'Eetgelegenheden',
-    },
-    '4vohbdey': {
-      'nl': 'Overnachten',
-      'en': 'Overnachten',
-    },
-    'oo16hec0': {
-      'nl': 'Uitgaan',
-      'en': 'Uitgaan',
-    },
-    'wuihpc8q': {
-      'nl': 'Verhuur, catering',
-      'en': 'Verhuur, catering',
-    },
-    'ycwxgazh': {
-      'nl': 'Home',
-      'en': '',
-    },
-  },
-  // HorecagelegenhedenOverzichtCopy2Copy
-  {
-    'fyu5pfrs': {
-      'nl': 'Activiteiten',
-      'en': 'Activiteiten',
-    },
-    'll4dsny3': {
-      'nl': 'TextField',
-      'en': '',
-    },
-    'y63yqa75': {
-      'nl': 'Cultuur',
-      'en': 'Cultuur',
-    },
-    '14zkktka': {
-      'nl': 'Eetgelegenheden',
-      'en': 'Eetgelegenheden',
-    },
-    'tv5mypx1': {
-      'nl': 'Overnachten',
-      'en': 'Overnachten',
-    },
-    '71mvhbto': {
-      'nl': 'Uitgaan',
-      'en': 'Uitgaan',
-    },
-    'fhszzuy8': {
-      'nl': 'Verhuur, catering',
-      'en': 'Verhuur, catering',
-    },
-    'cg49avk4': {
-      'nl': 'Home',
-      'en': '',
-    },
-  },
   // kanwegHomeCopy
   // kanwegHomeCopy
   {
   {
     'l7r0djaf': {
     'l7r0djaf': {
@@ -969,7 +860,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
     },
     },
     'jcyx82pa': {
     'jcyx82pa': {
       'nl': 'Option 1',
       'nl': 'Option 1',
-      'en': '',
+      'en': 'Optie 1',
     },
     },
     '53q8buz0': {
     '53q8buz0': {
       'nl': 'Option 2',
       'nl': 'Option 2',
@@ -1208,44 +1099,44 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
   // SelectStateDropDownComponent
   // SelectStateDropDownComponent
   {
   {
     'duloakue': {
     'duloakue': {
-      'nl': 'Select...',
-      'en': '',
+      'nl': 'Selecteer...',
+      'en': 'Select...',
     },
     },
     'suwn4gos': {
     'suwn4gos': {
-      'nl': 'Search...',
-      'en': '',
+      'nl': 'Zoek...',
+      'en': 'Search...',
     },
     },
     'xtp0toaj': {
     'xtp0toaj': {
-      'nl': 'Option 1',
-      'en': '',
+      'nl': 'Optie 1',
+      'en': 'Option 1',
     },
     },
     'sfmdjcb4': {
     'sfmdjcb4': {
-      'nl': 'Option 2',
-      'en': '',
+      'nl': 'Optie 2',
+      'en': 'Option 2',
     },
     },
     'pbmts7dk': {
     'pbmts7dk': {
-      'nl': 'Option 3',
-      'en': '',
+      'nl': 'Optie 3',
+      'en': 'Option 3',
     },
     },
     '1rva6d4m': {
     '1rva6d4m': {
-      'nl': 'Select...',
-      'en': '',
+      'nl': 'Selecteer...',
+      'en': 'Select...',
     },
     },
     'um0h0p25': {
     'um0h0p25': {
-      'nl': 'Search...',
-      'en': '',
+      'nl': 'Zoek...',
+      'en': 'Search...',
     },
     },
     'fjaz0tsc': {
     'fjaz0tsc': {
-      'nl': 'Option 1',
-      'en': '',
+      'nl': 'Optie 1',
+      'en': 'Option 1',
     },
     },
     '8hcfb8cu': {
     '8hcfb8cu': {
-      'nl': 'Option 2',
-      'en': '',
+      'nl': 'Optie 2',
+      'en': 'Option 2',
     },
     },
     'cpdux64t': {
     'cpdux64t': {
-      'nl': 'Option 3',
-      'en': '',
+      'nl': 'Optie 3',
+      'en': 'Option 3',
     },
     },
     'nosgkxy0': {
     'nosgkxy0': {
       'nl': 'Gemeente volgen',
       'nl': 'Gemeente volgen',
@@ -1254,7 +1145,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
     '24bdnkhi': {
     '24bdnkhi': {
       'nl':
       'nl':
           'Bij favoriete gemeenten krijg je een agenda per mail met daarin alle evenementen uit die favoriete gemeenten.',
           'Bij favoriete gemeenten krijg je een agenda per mail met daarin alle evenementen uit die favoriete gemeenten.',
-      'en': '',
+      'en': 'Get a weekly mail of all your favorite municipalities.',
     },
     },
     'p3ia66ku': {
     'p3ia66ku': {
       'nl': 'Toepassen',
       'nl': 'Toepassen',
@@ -1761,6 +1652,17 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
       'en': 'v0001',
       'en': 'v0001',
     },
     },
   },
   },
+  // HeaderButtonsComponentCopy
+  {
+    '2hj132xq': {
+      'nl': 'Menu openen',
+      'en': 'Open Menu',
+    },
+    '7ktnxpcu': {
+      'nl': 'Terug',
+      'en': 'Back',
+    },
+  },
   // Miscellaneous
   // Miscellaneous
   {
   {
     '1wdja323': {
     '1wdja323': {

+ 0 - 37
lib/flutter_flow/nav/nav.dart

@@ -61,12 +61,6 @@ const debugRouteLinkMap = {
       'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=mijnProfiel',
       'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=mijnProfiel',
   '/stadsactiviteitAanmaken':
   '/stadsactiviteitAanmaken':
       'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=stadsactiviteitAanmaken',
       'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=stadsactiviteitAanmaken',
-  '/horecagelegenhedenOverzichtCopy':
-      'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HorecagelegenhedenOverzichtCopy',
-  '/horecagelegenhedenOverzichtCopy2':
-      'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HorecagelegenhedenOverzichtCopy2',
-  '/horecagelegenhedenOverzichtCopy2Copy':
-      'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HorecagelegenhedenOverzichtCopy2Copy',
   '/kanwegHomeCopy':
   '/kanwegHomeCopy':
       'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=kanwegHomeCopy',
       'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=kanwegHomeCopy',
   '/uitgaansevenementAanmaken':
   '/uitgaansevenementAanmaken':
@@ -276,37 +270,6 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter(
           path: StadsactiviteitAanmakenWidget.routePath,
           path: StadsactiviteitAanmakenWidget.routePath,
           builder: (context, params) => StadsactiviteitAanmakenWidget(),
           builder: (context, params) => StadsactiviteitAanmakenWidget(),
         ),
         ),
-        FFRoute(
-          name: HorecagelegenhedenOverzichtCopyWidget.routeName,
-          path: HorecagelegenhedenOverzichtCopyWidget.routePath,
-          builder: (context, params) => HorecagelegenhedenOverzichtCopyWidget(
-            plaats: params.getParam(
-              'plaats',
-              ParamType.String,
-            ),
-          ),
-        ),
-        FFRoute(
-          name: HorecagelegenhedenOverzichtCopy2Widget.routeName,
-          path: HorecagelegenhedenOverzichtCopy2Widget.routePath,
-          builder: (context, params) => HorecagelegenhedenOverzichtCopy2Widget(
-            plaats: params.getParam(
-              'plaats',
-              ParamType.String,
-            ),
-          ),
-        ),
-        FFRoute(
-          name: HorecagelegenhedenOverzichtCopy2CopyWidget.routeName,
-          path: HorecagelegenhedenOverzichtCopy2CopyWidget.routePath,
-          builder: (context, params) =>
-              HorecagelegenhedenOverzichtCopy2CopyWidget(
-            plaats: params.getParam(
-              'plaats',
-              ParamType.String,
-            ),
-          ),
-        ),
         FFRoute(
         FFRoute(
           name: KanwegHomeCopyWidget.routeName,
           name: KanwegHomeCopyWidget.routeName,
           path: KanwegHomeCopyWidget.routePath,
           path: KanwegHomeCopyWidget.routePath,

+ 50 - 13
lib/horecagelegenhedenoverzicht/horecagelegenheden_overzicht_current/horecagelegenheden_overzicht_current_widget.dart

@@ -559,8 +559,13 @@ class _HorecagelegenhedenOverzichtCurrentWidgetState
                                                   '\$.titel',
                                                   '\$.titel',
                                                   '\$.categorie')
                                                   '\$.categorie')
                                               .toList()
                                               .toList()
-                                              .take(25)
+                                              .take(1000)
                                               .toList();
                                               .toList();
+                                          if (horecagelegenheden.isEmpty) {
+                                            return Image.asset(
+                                              'assets/images/logo800px.png',
+                                            );
+                                          }
                                           _model.debugGeneratorVariables[
                                           _model.debugGeneratorVariables[
                                                   'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                   'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                               debugSerializeParam(
                                               debugSerializeParam(
@@ -760,8 +765,14 @@ class _HorecagelegenhedenOverzichtCurrentWidgetState
                                                       '\$.titel',
                                                       '\$.titel',
                                                       '\$.categorie')
                                                       '\$.categorie')
                                                   .toList()
                                                   .toList()
-                                                  .take(25)
+                                                  .take(1000)
                                                   .toList();
                                                   .toList();
+                                          if (horecagelegenhedenCultuur
+                                              .isEmpty) {
+                                            return Image.asset(
+                                              'assets/images/logo800px.png',
+                                            );
+                                          }
                                           _model.debugGeneratorVariables[
                                           _model.debugGeneratorVariables[
                                                   'horecagelegenhedenCultuur${horecagelegenhedenCultuur.length > 100 ? ' (first 100)' : ''}'] =
                                                   'horecagelegenhedenCultuur${horecagelegenhedenCultuur.length > 100 ? ' (first 100)' : ''}'] =
                                               debugSerializeParam(
                                               debugSerializeParam(
@@ -778,9 +789,27 @@ class _HorecagelegenhedenOverzichtCurrentWidgetState
                                           return MasonryGridView.builder(
                                           return MasonryGridView.builder(
                                             gridDelegate:
                                             gridDelegate:
                                                 SliverSimpleGridDelegateWithFixedCrossAxisCount(
                                                 SliverSimpleGridDelegateWithFixedCrossAxisCount(
-                                              crossAxisCount: 2,
+                                              crossAxisCount: () {
+                                                if (MediaQuery.sizeOf(context)
+                                                        .width <
+                                                    kBreakpointSmall) {
+                                                  return 1;
+                                                } else if (MediaQuery.sizeOf(
+                                                            context)
+                                                        .width <
+                                                    kBreakpointMedium) {
+                                                  return 1;
+                                                } else if (MediaQuery.sizeOf(
+                                                            context)
+                                                        .width <
+                                                    kBreakpointLarge) {
+                                                  return 2;
+                                                } else {
+                                                  return 3;
+                                                }
+                                              }(),
                                             ),
                                             ),
-                                            crossAxisSpacing: 10.0,
+                                            crossAxisSpacing: 12.0,
                                             mainAxisSpacing: 10.0,
                                             mainAxisSpacing: 10.0,
                                             itemCount: horecagelegenhedenCultuur
                                             itemCount: horecagelegenhedenCultuur
                                                 .length,
                                                 .length,
@@ -947,7 +976,7 @@ class _HorecagelegenhedenOverzichtCurrentWidgetState
                                                         '\$.titel',
                                                         '\$.titel',
                                                         '\$.categorie')
                                                         '\$.categorie')
                                                     .toList()
                                                     .toList()
-                                                    .take(25)
+                                                    .take(1000)
                                                     .toList();
                                                     .toList();
                                                 if (horecagelegenheden
                                                 if (horecagelegenheden
                                                     .isEmpty) {
                                                     .isEmpty) {
@@ -1181,7 +1210,7 @@ class _HorecagelegenhedenOverzichtCurrentWidgetState
                                                         '\$.titel',
                                                         '\$.titel',
                                                         '\$.categorie')
                                                         '\$.categorie')
                                                     .toList()
                                                     .toList()
-                                                    .take(25)
+                                                    .take(1000)
                                                     .toList();
                                                     .toList();
                                                 if (horecagelegenheden
                                                 if (horecagelegenheden
                                                     .isEmpty) {
                                                     .isEmpty) {
@@ -1416,7 +1445,7 @@ class _HorecagelegenhedenOverzichtCurrentWidgetState
                                                         '\$.titel',
                                                         '\$.titel',
                                                         '\$.categorie')
                                                         '\$.categorie')
                                                     .toList()
                                                     .toList()
-                                                    .take(25)
+                                                    .take(1000)
                                                     .toList();
                                                     .toList();
                                                 if (horecagelegenheden
                                                 if (horecagelegenheden
                                                     .isEmpty) {
                                                     .isEmpty) {
@@ -1639,12 +1668,20 @@ class _HorecagelegenhedenOverzichtCurrentWidgetState
 
 
                                             return Builder(
                                             return Builder(
                                               builder: (context) {
                                               builder: (context) {
-                                                final horecagelegenheden =
-                                                    getJsonField(
-                                                  staggeredViewHorecagelegenheidoverzichtResponse
-                                                      .jsonBody,
-                                                  r'''$''',
-                                                ).toList().take(25).toList();
+                                                final horecagelegenheden = functions
+                                                    .filterHorecagelegenheden(
+                                                        _model
+                                                            .alleVerhuurCatering
+                                                            .toList(),
+                                                        _model.textController
+                                                            .text,
+                                                        _model
+                                                            .categorieFilterActiviteiten,
+                                                        '\$.titel',
+                                                        '\$.categorie')
+                                                    .toList()
+                                                    .take(1000)
+                                                    .toList();
                                                 if (horecagelegenheden
                                                 if (horecagelegenheden
                                                     .isEmpty) {
                                                     .isEmpty) {
                                                   return Image.asset(
                                                   return Image.asset(

+ 49 - 30
lib/horecagelegenhedenoverzicht/horecagelegenheden_overzicht_provincie_page/horecagelegenheden_overzicht_provincie_page_widget.dart

@@ -341,11 +341,15 @@ class _HorecagelegenhedenOverzichtProvinciePageWidgetState
 
 
                                     return Builder(
                                     return Builder(
                                       builder: (context) {
                                       builder: (context) {
-                                        final horecagelegenheden = getJsonField(
-                                          staggeredViewHorecagelegenheidoverzichtResponse
-                                              .jsonBody,
-                                          r'''$''',
-                                        ).toList().take(25).toList();
+                                        final horecagelegenheden =
+                                            (HorecagelegenheidoverzichtCall
+                                                        .items(
+                                                      staggeredViewHorecagelegenheidoverzichtResponse
+                                                          .jsonBody,
+                                                    )?.toList() ??
+                                                    [])
+                                                .take(1000)
+                                                .toList();
                                         _model.debugGeneratorVariables[
                                         _model.debugGeneratorVariables[
                                                 'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                 'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                             debugSerializeParam(
                                             debugSerializeParam(
@@ -527,11 +531,14 @@ class _HorecagelegenhedenOverzichtProvinciePageWidgetState
                                           return Builder(
                                           return Builder(
                                             builder: (context) {
                                             builder: (context) {
                                               final horecagelegenheden =
                                               final horecagelegenheden =
-                                                  getJsonField(
-                                                staggeredViewHorecagelegenheidoverzichtResponse
-                                                    .jsonBody,
-                                                r'''$''',
-                                              ).toList().take(25).toList();
+                                                  (HorecagelegenheidoverzichtCall
+                                                              .items(
+                                                            staggeredViewHorecagelegenheidoverzichtResponse
+                                                                .jsonBody,
+                                                          )?.toList() ??
+                                                          [])
+                                                      .take(1000)
+                                                      .toList();
                                               _model.debugGeneratorVariables[
                                               _model.debugGeneratorVariables[
                                                       'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                       'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                   debugSerializeParam(
                                                   debugSerializeParam(
@@ -742,11 +749,14 @@ class _HorecagelegenhedenOverzichtProvinciePageWidgetState
                                           return Builder(
                                           return Builder(
                                             builder: (context) {
                                             builder: (context) {
                                               final horecagelegenheden =
                                               final horecagelegenheden =
-                                                  getJsonField(
-                                                staggeredViewHorecagelegenheidoverzichtResponse
-                                                    .jsonBody,
-                                                r'''$''',
-                                              ).toList().take(25).toList();
+                                                  (HorecagelegenheidoverzichtCall
+                                                              .items(
+                                                            staggeredViewHorecagelegenheidoverzichtResponse
+                                                                .jsonBody,
+                                                          )?.toList() ??
+                                                          [])
+                                                      .take(1000)
+                                                      .toList();
                                               _model.debugGeneratorVariables[
                                               _model.debugGeneratorVariables[
                                                       'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                       'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                   debugSerializeParam(
                                                   debugSerializeParam(
@@ -957,11 +967,14 @@ class _HorecagelegenhedenOverzichtProvinciePageWidgetState
                                           return Builder(
                                           return Builder(
                                             builder: (context) {
                                             builder: (context) {
                                               final horecagelegenheden =
                                               final horecagelegenheden =
-                                                  getJsonField(
-                                                staggeredViewHorecagelegenheidoverzichtResponse
-                                                    .jsonBody,
-                                                r'''$''',
-                                              ).toList().take(25).toList();
+                                                  (HorecagelegenheidoverzichtCall
+                                                              .items(
+                                                            staggeredViewHorecagelegenheidoverzichtResponse
+                                                                .jsonBody,
+                                                          )?.toList() ??
+                                                          [])
+                                                      .take(1000)
+                                                      .toList();
                                               _model.debugGeneratorVariables[
                                               _model.debugGeneratorVariables[
                                                       'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                       'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                   debugSerializeParam(
                                                   debugSerializeParam(
@@ -1173,11 +1186,14 @@ class _HorecagelegenhedenOverzichtProvinciePageWidgetState
                                           return Builder(
                                           return Builder(
                                             builder: (context) {
                                             builder: (context) {
                                               final horecagelegenheden =
                                               final horecagelegenheden =
-                                                  getJsonField(
-                                                staggeredViewHorecagelegenheidoverzichtResponse
-                                                    .jsonBody,
-                                                r'''$''',
-                                              ).toList().take(25).toList();
+                                                  (HorecagelegenheidoverzichtCall
+                                                              .items(
+                                                            staggeredViewHorecagelegenheidoverzichtResponse
+                                                                .jsonBody,
+                                                          )?.toList() ??
+                                                          [])
+                                                      .take(1000)
+                                                      .toList();
                                               _model.debugGeneratorVariables[
                                               _model.debugGeneratorVariables[
                                                       'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                       'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                   debugSerializeParam(
                                                   debugSerializeParam(
@@ -1388,11 +1404,14 @@ class _HorecagelegenhedenOverzichtProvinciePageWidgetState
                                           return Builder(
                                           return Builder(
                                             builder: (context) {
                                             builder: (context) {
                                               final horecagelegenheden =
                                               final horecagelegenheden =
-                                                  getJsonField(
-                                                staggeredViewHorecagelegenheidoverzichtResponse
-                                                    .jsonBody,
-                                                r'''$''',
-                                              ).toList().take(25).toList();
+                                                  (HorecagelegenheidoverzichtCall
+                                                              .items(
+                                                            staggeredViewHorecagelegenheidoverzichtResponse
+                                                                .jsonBody,
+                                                          )?.toList() ??
+                                                          [])
+                                                      .take(1000)
+                                                      .toList();
                                               _model.debugGeneratorVariables[
                                               _model.debugGeneratorVariables[
                                                       'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                       'horecagelegenheden${horecagelegenheden.length > 100 ? ' (first 100)' : ''}'] =
                                                   debugSerializeParam(
                                                   debugSerializeParam(

+ 0 - 6
lib/index.dart

@@ -26,12 +26,6 @@ export '/kanweg_test_upload/kanweg_test_upload_widget.dart'
 export '/mijn_profiel/mijn_profiel_widget.dart' show MijnProfielWidget;
 export '/mijn_profiel/mijn_profiel_widget.dart' show MijnProfielWidget;
 export '/stadsactiviteit_aanmaken/stadsactiviteit_aanmaken_widget.dart'
 export '/stadsactiviteit_aanmaken/stadsactiviteit_aanmaken_widget.dart'
     show StadsactiviteitAanmakenWidget;
     show StadsactiviteitAanmakenWidget;
-export '/horecagelegenhedenoverzicht/horecagelegenheden_overzicht_copy/horecagelegenheden_overzicht_copy_widget.dart'
-    show HorecagelegenhedenOverzichtCopyWidget;
-export '/horecagelegenhedenoverzicht/horecagelegenheden_overzicht_copy2/horecagelegenheden_overzicht_copy2_widget.dart'
-    show HorecagelegenhedenOverzichtCopy2Widget;
-export '/horecagelegenhedenoverzicht/horecagelegenheden_overzicht_copy2_copy/horecagelegenheden_overzicht_copy2_copy_widget.dart'
-    show HorecagelegenhedenOverzichtCopy2CopyWidget;
 export '/kanweg/kanweg_home_copy/kanweg_home_copy_widget.dart'
 export '/kanweg/kanweg_home_copy/kanweg_home_copy_widget.dart'
     show KanwegHomeCopyWidget;
     show KanwegHomeCopyWidget;
 export '/uitgaansevenement_aanmaken/uitgaansevenement_aanmaken_widget.dart'
 export '/uitgaansevenement_aanmaken/uitgaansevenement_aanmaken_widget.dart'

+ 56 - 0
lib/kanweg/header_buttons_component_copy/header_buttons_component_copy_model.dart

@@ -0,0 +1,56 @@
+import '/flutter_flow/flutter_flow_icon_button.dart';
+import '/flutter_flow/flutter_flow_theme.dart';
+import '/flutter_flow/flutter_flow_util.dart';
+import '/flutter_flow/flutter_flow_widgets.dart';
+import 'dart:ui';
+import '/index.dart';
+import 'header_buttons_component_copy_widget.dart'
+    show HeaderButtonsComponentCopyWidget;
+import 'package:aligned_tooltip/aligned_tooltip.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_spinkit/flutter_spinkit.dart';
+import 'package:google_fonts/google_fonts.dart';
+import 'package:provider/provider.dart';
+
+class HeaderButtonsComponentCopyModel
+    extends FlutterFlowModel<HeaderButtonsComponentCopyWidget> {
+  final Map<String, DebugDataField> debugGeneratorVariables = {};
+  final Map<String, DebugDataField> debugBackendQueries = {};
+  final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
+  @override
+  void initState(BuildContext context) {}
+
+  @override
+  void dispose() {}
+
+  @override
+  WidgetClassDebugData toWidgetClassDebugData() => WidgetClassDebugData(
+        widgetParameters: {
+          'showBackButton': debugSerializeParam(
+            widget?.showBackButton,
+            ParamType.bool,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HeaderButtonsComponentCopy',
+            searchReference:
+                'reference=SigKGAoOc2hvd0JhY2tCdXR0b24SBnloN3loNyoGEgR0cnVlcgQIBSABUABaDnNob3dCYWNrQnV0dG9u',
+            name: 'bool',
+            nullable: false,
+          )
+        }.withoutNulls.entries,
+        generatorVariables: debugGeneratorVariables.entries,
+        backendQueries: debugBackendQueries.entries,
+        componentStates: {
+          ...widgetBuilderComponents.map(
+            (key, value) => MapEntry(
+              key,
+              value.toWidgetClassDebugData(),
+            ),
+          ),
+        }.withoutNulls.entries,
+        link:
+            'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd/tab=uiBuilder&page=HeaderButtonsComponentCopy',
+        searchReference:
+            'reference=OhpIZWFkZXJCdXR0b25zQ29tcG9uZW50Q29weVAAWhpIZWFkZXJCdXR0b25zQ29tcG9uZW50Q29weQ==',
+        widgetClassName: 'HeaderButtonsComponentCopy',
+      );
+}

+ 244 - 0
lib/kanweg/header_buttons_component_copy/header_buttons_component_copy_widget.dart

@@ -0,0 +1,244 @@
+import '/flutter_flow/flutter_flow_icon_button.dart';
+import '/flutter_flow/flutter_flow_theme.dart';
+import '/flutter_flow/flutter_flow_util.dart';
+import '/flutter_flow/flutter_flow_widgets.dart';
+import 'dart:ui';
+import '/index.dart';
+import 'package:aligned_tooltip/aligned_tooltip.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_spinkit/flutter_spinkit.dart';
+import 'package:google_fonts/google_fonts.dart';
+import 'package:provider/provider.dart';
+import 'header_buttons_component_copy_model.dart';
+export 'header_buttons_component_copy_model.dart';
+
+/// Standaard header-knoppen (drawer + terug) voor herbruik op alle pagina's
+class HeaderButtonsComponentCopyWidget extends StatefulWidget {
+  const HeaderButtonsComponentCopyWidget({
+    super.key,
+    bool? showBackButton,
+  }) : this.showBackButton = showBackButton ?? true;
+
+  final bool showBackButton;
+
+  @override
+  State<HeaderButtonsComponentCopyWidget> createState() =>
+      _HeaderButtonsComponentCopyWidgetState();
+}
+
+class _HeaderButtonsComponentCopyWidgetState
+    extends State<HeaderButtonsComponentCopyWidget> with RouteAware {
+  late HeaderButtonsComponentCopyModel _model;
+
+  @override
+  void setState(VoidCallback callback) {
+    super.setState(callback);
+    _model.onUpdate();
+  }
+
+  @override
+  void initState() {
+    super.initState();
+    _model = createModel(context, () => HeaderButtonsComponentCopyModel());
+  }
+
+  @override
+  void dispose() {
+    routeObserver.unsubscribe(this);
+
+    _model.maybeDispose();
+
+    super.dispose();
+  }
+
+  @override
+  void didUpdateWidget(HeaderButtonsComponentCopyWidget oldWidget) {
+    super.didUpdateWidget(oldWidget);
+    _model.widget = widget;
+  }
+
+  @override
+  void didChangeDependencies() {
+    super.didChangeDependencies();
+    final route = DebugModalRoute.of(context);
+    if (route != null) {
+      routeObserver.subscribe(this, route);
+    }
+    debugLogGlobalProperty(context);
+  }
+
+  @override
+  void didPopNext() {
+    if (mounted && DebugFlutterFlowModelContext.maybeOf(context) == null) {
+      setState(() => _model.isRouteVisible = true);
+      debugLogWidgetClass(_model);
+    }
+  }
+
+  @override
+  void didPush() {
+    if (mounted && DebugFlutterFlowModelContext.maybeOf(context) == null) {
+      setState(() => _model.isRouteVisible = true);
+      debugLogWidgetClass(_model);
+    }
+  }
+
+  @override
+  void didPop() {
+    _model.isRouteVisible = false;
+  }
+
+  @override
+  void didPushNext() {
+    _model.isRouteVisible = false;
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    DebugFlutterFlowModelContext.maybeOf(context)
+        ?.parentModelCallback
+        ?.call(_model);
+    context.watch<FFAppState>();
+
+    return Align(
+      alignment: AlignmentDirectional(0.0, 0.0),
+      child: Row(
+        mainAxisSize: MainAxisSize.max,
+        children: [
+          AlignedTooltip(
+            content: Padding(
+              padding: EdgeInsets.all(4.0),
+              child: Text(
+                FFLocalizations.of(context).getText(
+                  '2hj132xq' /* Menu openen */,
+                ),
+                style: FlutterFlowTheme.of(context).bodyLarge.override(
+                      font: GoogleFonts.roboto(
+                        fontWeight:
+                            FlutterFlowTheme.of(context).bodyLarge.fontWeight,
+                        fontStyle:
+                            FlutterFlowTheme.of(context).bodyLarge.fontStyle,
+                      ),
+                      letterSpacing: 0.0,
+                      fontWeight:
+                          FlutterFlowTheme.of(context).bodyLarge.fontWeight,
+                      fontStyle:
+                          FlutterFlowTheme.of(context).bodyLarge.fontStyle,
+                    ),
+              ),
+            ),
+            offset: 4.0,
+            preferredDirection: AxisDirection.down,
+            borderRadius: BorderRadius.circular(8.0),
+            backgroundColor: FlutterFlowTheme.of(context).secondaryBackground,
+            elevation: 4.0,
+            tailBaseWidth: 24.0,
+            tailLength: 12.0,
+            waitDuration: Duration(milliseconds: 100),
+            showDuration: Duration(milliseconds: 1500),
+            triggerMode: TooltipTriggerMode.tap,
+            child: FlutterFlowIconButton(
+              borderRadius: 8.0,
+              buttonSize: 40.0,
+              fillColor: FlutterFlowTheme.of(context).secondary,
+              icon: Icon(
+                Icons.dehaze_outlined,
+                color: FlutterFlowTheme.of(context).info,
+                size: 24.0,
+              ),
+              onPressed: () async {
+                Scaffold.of(context).openDrawer();
+              },
+            ),
+          ),
+          if (widget!.showBackButton == true)
+            AlignedTooltip(
+              content: Padding(
+                padding: EdgeInsets.all(4.0),
+                child: Text(
+                  FFLocalizations.of(context).getText(
+                    '7ktnxpcu' /* Terug */,
+                  ),
+                  style: FlutterFlowTheme.of(context).bodyLarge.override(
+                        font: GoogleFonts.roboto(
+                          fontWeight:
+                              FlutterFlowTheme.of(context).bodyLarge.fontWeight,
+                          fontStyle:
+                              FlutterFlowTheme.of(context).bodyLarge.fontStyle,
+                        ),
+                        letterSpacing: 0.0,
+                        fontWeight:
+                            FlutterFlowTheme.of(context).bodyLarge.fontWeight,
+                        fontStyle:
+                            FlutterFlowTheme.of(context).bodyLarge.fontStyle,
+                      ),
+                ),
+              ),
+              offset: 4.0,
+              preferredDirection: AxisDirection.down,
+              borderRadius: BorderRadius.circular(8.0),
+              backgroundColor: FlutterFlowTheme.of(context).secondaryBackground,
+              elevation: 4.0,
+              tailBaseWidth: 24.0,
+              tailLength: 12.0,
+              waitDuration: Duration(milliseconds: 100),
+              showDuration: Duration(milliseconds: 1500),
+              triggerMode: TooltipTriggerMode.tap,
+              child: Padding(
+                padding: EdgeInsetsDirectional.fromSTEB(4.0, 0.0, 0.0, 0.0),
+                child: FlutterFlowIconButton(
+                  borderColor: Color(0x00FF0000),
+                  borderRadius: 30.0,
+                  borderWidth: 1.0,
+                  buttonSize: 50.0,
+                  fillColor: FlutterFlowTheme.of(context).secondary,
+                  icon: Icon(
+                    Icons.arrow_back_outlined,
+                    color: Colors.white,
+                    size: 30.0,
+                  ),
+                  onPressed: () async {
+                    context.pop();
+                  },
+                ),
+              ),
+            ),
+          ClipRRect(
+            borderRadius: BorderRadius.circular(8.0),
+            child: Image.asset(
+              'assets/images/logo800px.png',
+              width: 200.0,
+              height: 200.0,
+              fit: BoxFit.contain,
+            ),
+          ),
+          InkWell(
+            splashColor: Colors.transparent,
+            focusColor: Colors.transparent,
+            hoverColor: Colors.transparent,
+            highlightColor: Colors.transparent,
+            onTap: () async {
+              context.pushNamed(SelectprovinciegemeenteWidget.routeName);
+            },
+            child: Text(
+              FFAppState().gemeenteSelectNaam,
+              style: FlutterFlowTheme.of(context).bodyMedium.override(
+                    font: GoogleFonts.roboto(
+                      fontWeight:
+                          FlutterFlowTheme.of(context).bodyMedium.fontWeight,
+                      fontStyle:
+                          FlutterFlowTheme.of(context).bodyMedium.fontStyle,
+                    ),
+                    letterSpacing: 0.0,
+                    fontWeight:
+                        FlutterFlowTheme.of(context).bodyMedium.fontWeight,
+                    fontStyle:
+                        FlutterFlowTheme.of(context).bodyMedium.fontStyle,
+                  ),
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+}

+ 18 - 1
lib/mijn_profiel/mijn_profiel_model.dart

@@ -1,8 +1,10 @@
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_calls.dart';
+import '/components/header_buttons_component_widget.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/horecagelegenhedenoverzicht/horecagelegenheidoverzicht_kaart/horecagelegenheidoverzicht_kaart_widget.dart';
 import '/horecagelegenhedenoverzicht/horecagelegenheidoverzicht_kaart/horecagelegenheidoverzicht_kaart_widget.dart';
+import '/shared/drawer_component/drawer_component_widget.dart';
 import 'dart:ui';
 import 'dart:ui';
 import '/index.dart';
 import '/index.dart';
 import 'mijn_profiel_widget.dart' show MijnProfielWidget;
 import 'mijn_profiel_widget.dart' show MijnProfielWidget;
@@ -16,23 +18,38 @@ class MijnProfielModel extends FlutterFlowModel<MijnProfielWidget> {
 
 
   // Models for HorecagelegenheidoverzichtKaart dynamic component.
   // Models for HorecagelegenheidoverzichtKaart dynamic component.
   Map<String, FlutterFlowModel> horecagelegenheidoverzichtKaartModels = {};
   Map<String, FlutterFlowModel> horecagelegenheidoverzichtKaartModels = {};
+  // Model for HeaderButtonsComponent component.
+  late HeaderButtonsComponentModel headerButtonsComponentModel;
+  // Model for drawerComponent component.
+  late DrawerComponentModel drawerComponentModel;
 
 
   final Map<String, DebugDataField> debugGeneratorVariables = {};
   final Map<String, DebugDataField> debugGeneratorVariables = {};
   final Map<String, DebugDataField> debugBackendQueries = {};
   final Map<String, DebugDataField> debugBackendQueries = {};
   final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
   final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
   @override
   @override
   void initState(BuildContext context) {
   void initState(BuildContext context) {
+    headerButtonsComponentModel =
+        createModel(context, () => HeaderButtonsComponentModel());
+    drawerComponentModel = createModel(context, () => DrawerComponentModel());
+
     debugLogWidgetClass(this);
     debugLogWidgetClass(this);
   }
   }
 
 
   @override
   @override
-  void dispose() {}
+  void dispose() {
+    headerButtonsComponentModel.dispose();
+    drawerComponentModel.dispose();
+  }
 
 
   @override
   @override
   WidgetClassDebugData toWidgetClassDebugData() => WidgetClassDebugData(
   WidgetClassDebugData toWidgetClassDebugData() => WidgetClassDebugData(
         generatorVariables: debugGeneratorVariables.entries,
         generatorVariables: debugGeneratorVariables.entries,
         backendQueries: debugBackendQueries.entries,
         backendQueries: debugBackendQueries.entries,
         componentStates: {
         componentStates: {
+          'headerButtonsComponentModel (HeaderButtonsComponent)':
+              headerButtonsComponentModel?.toWidgetClassDebugData(),
+          'drawerComponentModel (drawerComponent)':
+              drawerComponentModel?.toWidgetClassDebugData(),
           ...widgetBuilderComponents.map(
           ...widgetBuilderComponents.map(
             (key, value) => MapEntry(
             (key, value) => MapEntry(
               key,
               key,

+ 44 - 6
lib/mijn_profiel/mijn_profiel_widget.dart

@@ -1,8 +1,10 @@
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_calls.dart';
+import '/components/header_buttons_component_widget.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/horecagelegenhedenoverzicht/horecagelegenheidoverzicht_kaart/horecagelegenheidoverzicht_kaart_widget.dart';
 import '/horecagelegenhedenoverzicht/horecagelegenheidoverzicht_kaart/horecagelegenheidoverzicht_kaart_widget.dart';
+import '/shared/drawer_component/drawer_component_widget.dart';
 import 'dart:ui';
 import 'dart:ui';
 import '/index.dart';
 import '/index.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
@@ -100,12 +102,48 @@ class _MijnProfielWidgetState extends State<MijnProfielWidget> with RouteAware {
       child: Scaffold(
       child: Scaffold(
         key: scaffoldKey,
         key: scaffoldKey,
         backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
         backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
-        appBar: AppBar(
-          backgroundColor: FlutterFlowTheme.of(context).primary,
-          automaticallyImplyLeading: true,
-          actions: [],
-          centerTitle: true,
-          elevation: 0.0,
+        drawer: Drawer(
+          elevation: 16.0,
+          child: wrapWithModel(
+            model: _model.drawerComponentModel,
+            updateCallback: () => safeSetState(() {}),
+            child: Builder(builder: (_) {
+              return DebugFlutterFlowModelContext(
+                rootModel: _model.rootModel,
+                child: DrawerComponentWidget(),
+              );
+            }),
+          ),
+        ),
+        appBar: PreferredSize(
+          preferredSize: Size.fromHeight(80.0),
+          child: AppBar(
+            backgroundColor: FlutterFlowTheme.of(context).info,
+            automaticallyImplyLeading: false,
+            actions: [],
+            flexibleSpace: FlexibleSpaceBar(
+              background: wrapWithModel(
+                model: _model.headerButtonsComponentModel,
+                updateCallback: () => safeSetState(() {}),
+                child: Builder(builder: (_) {
+                  return DebugFlutterFlowModelContext(
+                    rootModel: _model.rootModel,
+                    child: HeaderButtonsComponentWidget(
+                      showBackButton: true,
+                    ),
+                  );
+                }),
+              ),
+              centerTitle: true,
+              expandedTitleScale: 1.0,
+            ),
+            bottom: PreferredSize(
+              preferredSize: Size.fromHeight(70.0),
+              child: Container(),
+            ),
+            toolbarHeight: MediaQuery.sizeOf(context).height * 0.25,
+            elevation: 2.0,
+          ),
         ),
         ),
         body: SafeArea(
         body: SafeArea(
           top: true,
           top: true,

+ 2 - 2
lib/selecteer_plaats/select_state_drop_down_component/select_state_drop_down_component_widget.dart

@@ -262,7 +262,7 @@ class _SelectStateDropDownComponentWidgetState
                         FlutterFlowTheme.of(context).bodyMedium.fontStyle,
                         FlutterFlowTheme.of(context).bodyMedium.fontStyle,
                   ),
                   ),
               hintText: FFLocalizations.of(context).getText(
               hintText: FFLocalizations.of(context).getText(
-                'duloakue' /* Select... */,
+                'duloakue' /* Selecteer... */,
               ),
               ),
               icon: Icon(
               icon: Icon(
                 Icons.keyboard_arrow_down_rounded,
                 Icons.keyboard_arrow_down_rounded,
@@ -316,7 +316,7 @@ class _SelectStateDropDownComponentWidgetState
                         FlutterFlowTheme.of(context).bodyMedium.fontStyle,
                         FlutterFlowTheme.of(context).bodyMedium.fontStyle,
                   ),
                   ),
               hintText: FFLocalizations.of(context).getText(
               hintText: FFLocalizations.of(context).getText(
-                '1rva6d4m' /* Select... */,
+                '1rva6d4m' /* Selecteer... */,
               ),
               ),
               icon: Icon(
               icon: Icon(
                 Icons.keyboard_arrow_down_rounded,
                 Icons.keyboard_arrow_down_rounded,

+ 18 - 0
lib/stadsactiviteit_aanmaken/stadsactiviteit_aanmaken_model.dart

@@ -1,10 +1,12 @@
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_calls.dart';
+import '/components/header_buttons_component_widget.dart';
 import '/flutter_flow/flutter_flow_drop_down.dart';
 import '/flutter_flow/flutter_flow_drop_down.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/form_field_controller.dart';
 import '/flutter_flow/form_field_controller.dart';
 import '/flutter_flow/upload_data.dart';
 import '/flutter_flow/upload_data.dart';
+import '/shared/drawer_component/drawer_component_widget.dart';
 import 'dart:ui';
 import 'dart:ui';
 import '/backend/schema/structs/index.dart';
 import '/backend/schema/structs/index.dart';
 import '/custom_code/actions/index.dart' as actions;
 import '/custom_code/actions/index.dart' as actions;
@@ -296,11 +298,20 @@ class StadsactiviteitAanmakenModel
 
 
   dynamic? get createResult => _createResult;
   dynamic? get createResult => _createResult;
 
 
+  // Model for HeaderButtonsComponent component.
+  late HeaderButtonsComponentModel headerButtonsComponentModel;
+  // Model for drawerComponent component.
+  late DrawerComponentModel drawerComponentModel;
+
   final Map<String, DebugDataField> debugGeneratorVariables = {};
   final Map<String, DebugDataField> debugGeneratorVariables = {};
   final Map<String, DebugDataField> debugBackendQueries = {};
   final Map<String, DebugDataField> debugBackendQueries = {};
   final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
   final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
   @override
   @override
   void initState(BuildContext context) {
   void initState(BuildContext context) {
+    headerButtonsComponentModel =
+        createModel(context, () => HeaderButtonsComponentModel());
+    drawerComponentModel = createModel(context, () => DrawerComponentModel());
+
     debugLogWidgetClass(this);
     debugLogWidgetClass(this);
   }
   }
 
 
@@ -341,6 +352,9 @@ class StadsactiviteitAanmakenModel
 
 
     textFieldEntreeprijsFocusNode?.dispose();
     textFieldEntreeprijsFocusNode?.dispose();
     textFieldEntreeprijsTextController?.dispose();
     textFieldEntreeprijsTextController?.dispose();
+
+    headerButtonsComponentModel.dispose();
+    drawerComponentModel.dispose();
   }
   }
 
 
   @override
   @override
@@ -616,6 +630,10 @@ class StadsactiviteitAanmakenModel
         generatorVariables: debugGeneratorVariables.entries,
         generatorVariables: debugGeneratorVariables.entries,
         backendQueries: debugBackendQueries.entries,
         backendQueries: debugBackendQueries.entries,
         componentStates: {
         componentStates: {
+          'headerButtonsComponentModel (HeaderButtonsComponent)':
+              headerButtonsComponentModel?.toWidgetClassDebugData(),
+          'drawerComponentModel (drawerComponent)':
+              drawerComponentModel?.toWidgetClassDebugData(),
           ...widgetBuilderComponents.map(
           ...widgetBuilderComponents.map(
             (key, value) => MapEntry(
             (key, value) => MapEntry(
               key,
               key,

+ 72 - 15
lib/stadsactiviteit_aanmaken/stadsactiviteit_aanmaken_widget.dart

@@ -1,10 +1,12 @@
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_calls.dart';
+import '/components/header_buttons_component_widget.dart';
 import '/flutter_flow/flutter_flow_drop_down.dart';
 import '/flutter_flow/flutter_flow_drop_down.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/form_field_controller.dart';
 import '/flutter_flow/form_field_controller.dart';
 import '/flutter_flow/upload_data.dart';
 import '/flutter_flow/upload_data.dart';
+import '/shared/drawer_component/drawer_component_widget.dart';
 import 'dart:ui';
 import 'dart:ui';
 import '/backend/schema/structs/index.dart';
 import '/backend/schema/structs/index.dart';
 import '/custom_code/actions/index.dart' as actions;
 import '/custom_code/actions/index.dart' as actions;
@@ -178,12 +180,48 @@ class _StadsactiviteitAanmakenWidgetState
       child: Scaffold(
       child: Scaffold(
         key: scaffoldKey,
         key: scaffoldKey,
         backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
         backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
-        appBar: AppBar(
-          backgroundColor: FlutterFlowTheme.of(context).primary,
-          automaticallyImplyLeading: true,
-          actions: [],
-          centerTitle: true,
-          elevation: 0.0,
+        drawer: Drawer(
+          elevation: 16.0,
+          child: wrapWithModel(
+            model: _model.drawerComponentModel,
+            updateCallback: () => safeSetState(() {}),
+            child: Builder(builder: (_) {
+              return DebugFlutterFlowModelContext(
+                rootModel: _model.rootModel,
+                child: DrawerComponentWidget(),
+              );
+            }),
+          ),
+        ),
+        appBar: PreferredSize(
+          preferredSize: Size.fromHeight(80.0),
+          child: AppBar(
+            backgroundColor: FlutterFlowTheme.of(context).info,
+            automaticallyImplyLeading: false,
+            actions: [],
+            flexibleSpace: FlexibleSpaceBar(
+              background: wrapWithModel(
+                model: _model.headerButtonsComponentModel,
+                updateCallback: () => safeSetState(() {}),
+                child: Builder(builder: (_) {
+                  return DebugFlutterFlowModelContext(
+                    rootModel: _model.rootModel,
+                    child: HeaderButtonsComponentWidget(
+                      showBackButton: true,
+                    ),
+                  );
+                }),
+              ),
+              centerTitle: true,
+              expandedTitleScale: 1.0,
+            ),
+            bottom: PreferredSize(
+              preferredSize: Size.fromHeight(70.0),
+              child: Container(),
+            ),
+            toolbarHeight: MediaQuery.sizeOf(context).height * 0.25,
+            elevation: 2.0,
+          ),
         ),
         ),
         body: SafeArea(
         body: SafeArea(
           top: true,
           top: true,
@@ -862,7 +900,12 @@ class _StadsactiviteitAanmakenWidgetState
                                 }
                                 }
                                 safeSetState(() {
                                 safeSetState(() {
                                   _model.textFieldDatumStartTextController
                                   _model.textFieldDatumStartTextController
-                                      ?.text = _model.datePicked1!.toString();
+                                      ?.text = dateTimeFormat(
+                                    "dd-MM-yyyy HH:mm",
+                                    _model.datePicked1,
+                                    locale: FFLocalizations.of(context)
+                                        .languageCode,
+                                  );
                                 });
                                 });
                               },
                               },
                               child: Container(
                               child: Container(
@@ -1134,7 +1177,15 @@ class _StadsactiviteitAanmakenWidgetState
                                 }
                                 }
                                 safeSetState(() {
                                 safeSetState(() {
                                   _model.textFieldDatumEindTextController
                                   _model.textFieldDatumEindTextController
-                                      ?.text = _model.datePicked2!.toString();
+                                      ?.text = valueOrDefault<String>(
+                                    dateTimeFormat(
+                                      "dd-MM-yyyy HH:mm",
+                                      _model.datePicked2,
+                                      locale: FFLocalizations.of(context)
+                                          .languageCode,
+                                    ),
+                                    'dd-MM-yyyy HH:mm',
+                                  );
                                 });
                                 });
                               },
                               },
                               child: Container(
                               child: Container(
@@ -1472,7 +1523,7 @@ class _StadsactiviteitAanmakenWidgetState
                             ),
                             ),
                             Text(
                             Text(
                               FFLocalizations.of(context).getText(
                               FFLocalizations.of(context).getText(
-                                'sv5qajjt' /* Stadseditor */,
+                                'sv5qajjt' /* Of kies zelf een plaats */,
                               ),
                               ),
                               style: FlutterFlowTheme.of(context)
                               style: FlutterFlowTheme.of(context)
                                   .bodyMedium
                                   .bodyMedium
@@ -3391,7 +3442,7 @@ class _StadsactiviteitAanmakenWidgetState
                                                   .fontStyle,
                                                   .fontStyle,
                                         ),
                                         ),
                                     elevation: 0.0,
                                     elevation: 0.0,
-                                    borderRadius: BorderRadius.circular(0.0),
+                                    borderRadius: BorderRadius.circular(8.0),
                                   ),
                                   ),
                                 ),
                                 ),
                               ),
                               ),
@@ -3549,7 +3600,7 @@ class _StadsactiviteitAanmakenWidgetState
                                                     .fontStyle,
                                                     .fontStyle,
                                           ),
                                           ),
                                       elevation: 0.0,
                                       elevation: 0.0,
-                                      borderRadius: BorderRadius.circular(0.0),
+                                      borderRadius: BorderRadius.circular(8.0),
                                     ),
                                     ),
                                   ),
                                   ),
                                 ),
                                 ),
@@ -3616,10 +3667,16 @@ class _StadsactiviteitAanmakenWidgetState
                           FFAppState().userToken,
                           FFAppState().userToken,
                           _model.textFieldTitelTextController.text,
                           _model.textFieldTitelTextController.text,
                           _model.createPlaatsID!,
                           _model.createPlaatsID!,
-                          functions.datumVoorApi(
-                              _model.textFieldDatumStartTextController.text)!,
-                          functions.datumVoorApi(
-                              _model.textFieldDatumEindTextController.text),
+                          dateTimeFormat(
+                            "yyyy-MM-dd HH:mm:ss",
+                            _model.datePicked1,
+                            locale: FFLocalizations.of(context).languageCode,
+                          ),
+                          dateTimeFormat(
+                            "yyyy-MM-dd HH:mm:ss",
+                            _model.datePicked2,
+                            locale: FFLocalizations.of(context).languageCode,
+                          ),
                           _model.textFieldOmschrijvingTextController.text,
                           _model.textFieldOmschrijvingTextController.text,
                           _model.textFieldOrganisatorTextController.text,
                           _model.textFieldOrganisatorTextController.text,
                           _model.textFieldContactTextController.text,
                           _model.textFieldContactTextController.text,

+ 18 - 0
lib/uitgaansevenement_aanmaken/uitgaansevenement_aanmaken_model.dart

@@ -1,11 +1,13 @@
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_streaming.dart';
 import '/backend/api_requests/api_streaming.dart';
+import '/components/header_buttons_component_widget.dart';
 import '/flutter_flow/flutter_flow_drop_down.dart';
 import '/flutter_flow/flutter_flow_drop_down.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/form_field_controller.dart';
 import '/flutter_flow/form_field_controller.dart';
 import '/flutter_flow/upload_data.dart';
 import '/flutter_flow/upload_data.dart';
+import '/shared/drawer_component/drawer_component_widget.dart';
 import 'dart:convert';
 import 'dart:convert';
 import 'dart:ui';
 import 'dart:ui';
 import '/custom_code/actions/index.dart' as actions;
 import '/custom_code/actions/index.dart' as actions;
@@ -240,11 +242,20 @@ class UitgaansevenementAanmakenModel
 
 
   dynamic? get createResult => _createResult;
   dynamic? get createResult => _createResult;
 
 
+  // Model for HeaderButtonsComponent component.
+  late HeaderButtonsComponentModel headerButtonsComponentModel;
+  // Model for drawerComponent component.
+  late DrawerComponentModel drawerComponentModel;
+
   final Map<String, DebugDataField> debugGeneratorVariables = {};
   final Map<String, DebugDataField> debugGeneratorVariables = {};
   final Map<String, DebugDataField> debugBackendQueries = {};
   final Map<String, DebugDataField> debugBackendQueries = {};
   final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
   final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
   @override
   @override
   void initState(BuildContext context) {
   void initState(BuildContext context) {
+    headerButtonsComponentModel =
+        createModel(context, () => HeaderButtonsComponentModel());
+    drawerComponentModel = createModel(context, () => DrawerComponentModel());
+
     debugLogWidgetClass(this);
     debugLogWidgetClass(this);
   }
   }
 
 
@@ -273,6 +284,9 @@ class UitgaansevenementAanmakenModel
 
 
     textFieldEntreeprijsFocusNode?.dispose();
     textFieldEntreeprijsFocusNode?.dispose();
     textFieldEntreeprijsTextController?.dispose();
     textFieldEntreeprijsTextController?.dispose();
+
+    headerButtonsComponentModel.dispose();
+    drawerComponentModel.dispose();
   }
   }
 
 
   @override
   @override
@@ -492,6 +506,10 @@ class UitgaansevenementAanmakenModel
         generatorVariables: debugGeneratorVariables.entries,
         generatorVariables: debugGeneratorVariables.entries,
         backendQueries: debugBackendQueries.entries,
         backendQueries: debugBackendQueries.entries,
         componentStates: {
         componentStates: {
+          'headerButtonsComponentModel (HeaderButtonsComponent)':
+              headerButtonsComponentModel?.toWidgetClassDebugData(),
+          'drawerComponentModel (drawerComponent)':
+              drawerComponentModel?.toWidgetClassDebugData(),
           ...widgetBuilderComponents.map(
           ...widgetBuilderComponents.map(
             (key, value) => MapEntry(
             (key, value) => MapEntry(
               key,
               key,

+ 66 - 12
lib/uitgaansevenement_aanmaken/uitgaansevenement_aanmaken_widget.dart

@@ -1,11 +1,13 @@
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_streaming.dart';
 import '/backend/api_requests/api_streaming.dart';
+import '/components/header_buttons_component_widget.dart';
 import '/flutter_flow/flutter_flow_drop_down.dart';
 import '/flutter_flow/flutter_flow_drop_down.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/form_field_controller.dart';
 import '/flutter_flow/form_field_controller.dart';
 import '/flutter_flow/upload_data.dart';
 import '/flutter_flow/upload_data.dart';
+import '/shared/drawer_component/drawer_component_widget.dart';
 import 'dart:convert';
 import 'dart:convert';
 import 'dart:ui';
 import 'dart:ui';
 import '/custom_code/actions/index.dart' as actions;
 import '/custom_code/actions/index.dart' as actions;
@@ -174,12 +176,48 @@ class _UitgaansevenementAanmakenWidgetState
       child: Scaffold(
       child: Scaffold(
         key: scaffoldKey,
         key: scaffoldKey,
         backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
         backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
-        appBar: AppBar(
-          backgroundColor: FlutterFlowTheme.of(context).primary,
-          automaticallyImplyLeading: true,
-          actions: [],
-          centerTitle: true,
-          elevation: 0.0,
+        drawer: Drawer(
+          elevation: 16.0,
+          child: wrapWithModel(
+            model: _model.drawerComponentModel,
+            updateCallback: () => safeSetState(() {}),
+            child: Builder(builder: (_) {
+              return DebugFlutterFlowModelContext(
+                rootModel: _model.rootModel,
+                child: DrawerComponentWidget(),
+              );
+            }),
+          ),
+        ),
+        appBar: PreferredSize(
+          preferredSize: Size.fromHeight(80.0),
+          child: AppBar(
+            backgroundColor: FlutterFlowTheme.of(context).info,
+            automaticallyImplyLeading: false,
+            actions: [],
+            flexibleSpace: FlexibleSpaceBar(
+              background: wrapWithModel(
+                model: _model.headerButtonsComponentModel,
+                updateCallback: () => safeSetState(() {}),
+                child: Builder(builder: (_) {
+                  return DebugFlutterFlowModelContext(
+                    rootModel: _model.rootModel,
+                    child: HeaderButtonsComponentWidget(
+                      showBackButton: true,
+                    ),
+                  );
+                }),
+              ),
+              centerTitle: true,
+              expandedTitleScale: 1.0,
+            ),
+            bottom: PreferredSize(
+              preferredSize: Size.fromHeight(70.0),
+              child: Container(),
+            ),
+            toolbarHeight: MediaQuery.sizeOf(context).height * 0.25,
+            elevation: 2.0,
+          ),
         ),
         ),
         body: SafeArea(
         body: SafeArea(
           top: true,
           top: true,
@@ -1073,7 +1111,12 @@ class _UitgaansevenementAanmakenWidgetState
                                 }
                                 }
                                 safeSetState(() {
                                 safeSetState(() {
                                   _model.textFieldDatumStartTextController
                                   _model.textFieldDatumStartTextController
-                                      ?.text = _model.datePicked1!.toString();
+                                      ?.text = dateTimeFormat(
+                                    "dd-MM-yyyy HH:mm",
+                                    _model.datePicked1,
+                                    locale: FFLocalizations.of(context)
+                                        .languageCode,
+                                  );
                                 });
                                 });
                               },
                               },
                               child: Container(
                               child: Container(
@@ -1345,7 +1388,12 @@ class _UitgaansevenementAanmakenWidgetState
                                 }
                                 }
                                 safeSetState(() {
                                 safeSetState(() {
                                   _model.textFieldDatumEindTextController
                                   _model.textFieldDatumEindTextController
-                                      ?.text = _model.datePicked2!.toString();
+                                      ?.text = dateTimeFormat(
+                                    "dd-MM-yyyy HH:mm",
+                                    _model.datePicked2,
+                                    locale: FFLocalizations.of(context)
+                                        .languageCode,
+                                  );
                                 });
                                 });
                               },
                               },
                               child: Container(
                               child: Container(
@@ -2713,10 +2761,16 @@ class _UitgaansevenementAanmakenWidgetState
                           FFAppState().userToken,
                           FFAppState().userToken,
                           _model.createHorecagelegenheidNid!,
                           _model.createHorecagelegenheidNid!,
                           _model.textFieldTitelTextController.text,
                           _model.textFieldTitelTextController.text,
-                          functions.datumVoorApi(
-                              _model.textFieldDatumStartTextController.text)!,
-                          functions.datumVoorApi(
-                              _model.textFieldDatumEindTextController.text),
+                          dateTimeFormat(
+                            "yyyy-MM-dd HH:mm:ss",
+                            _model.datePicked1,
+                            locale: FFLocalizations.of(context).languageCode,
+                          ),
+                          dateTimeFormat(
+                            "yyyy-MM-dd HH:mm:ss",
+                            _model.datePicked2,
+                            locale: FFLocalizations.of(context).languageCode,
+                          ),
                           _model.textFieldOmschrijvingTextController.text,
                           _model.textFieldOmschrijvingTextController.text,
                           _model.createEntreeTid,
                           _model.createEntreeTid,
                           _model.textFieldEntreeprijsTextController.text,
                           _model.textFieldEntreeprijsTextController.text,

+ 6 - 4
lib/uitgaanspaginas/home_uitgaan_slider_component/home_uitgaan_slider_component_widget.dart

@@ -158,10 +158,12 @@ class _HomeUitgaanSliderComponentWidgetState
 
 
                     return Builder(
                     return Builder(
                       builder: (context) {
                       builder: (context) {
-                        final homeslider = getJsonField(
-                          carouselHomeSliderResponse.jsonBody,
-                          r'''$''',
-                        ).toList().take(12).toList();
+                        final homeslider = (HomeSliderCall.items(
+                                  carouselHomeSliderResponse.jsonBody,
+                                )?.toList() ??
+                                [])
+                            .take(12)
+                            .toList();
                         if (homeslider.isEmpty) {
                         if (homeslider.isEmpty) {
                           return Image.asset(
                           return Image.asset(
                             'assets/images/logo800px.png',
                             'assets/images/logo800px.png',

+ 92 - 0
lib/uitgaanspaginas/home_uitgaan_slider_component_copy/home_uitgaan_slider_component_copy_model.dart

@@ -0,0 +1,92 @@
+import '/backend/api_requests/api_calls.dart';
+import '/flutter_flow/flutter_flow_theme.dart';
+import '/flutter_flow/flutter_flow_util.dart';
+import '/flutter_flow/flutter_flow_widgets.dart';
+import '/uitgaanspaginas/p_uitgaan_slider_kaart_component/p_uitgaan_slider_kaart_component_widget.dart';
+import '/index.dart';
+import 'home_uitgaan_slider_component_copy_widget.dart'
+    show HomeUitgaanSliderComponentCopyWidget;
+import 'package:carousel_slider/carousel_slider.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_spinkit/flutter_spinkit.dart';
+import 'package:google_fonts/google_fonts.dart';
+import 'package:provider/provider.dart';
+
+class HomeUitgaanSliderComponentCopyModel
+    extends FlutterFlowModel<HomeUitgaanSliderComponentCopyWidget> {
+  ///  State fields for stateful widgets in this component.
+
+  // State field(s) for Carousel widget.
+  CarouselSliderController? carouselController;
+  int _carouselCurrentIndex = 1;
+  set carouselCurrentIndex(int value) {
+    _carouselCurrentIndex = value;
+    debugLogWidgetClass(this);
+  }
+
+  int get carouselCurrentIndex => _carouselCurrentIndex;
+
+  // Models for PUitgaanSliderKaartComponent dynamic component.
+  Map<String, FlutterFlowModel> pUitgaanSliderKaartComponentModels = {};
+
+  final Map<String, DebugDataField> debugGeneratorVariables = {};
+  final Map<String, DebugDataField> debugBackendQueries = {};
+  final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
+  @override
+  void initState(BuildContext context) {}
+
+  @override
+  void dispose() {}
+
+  @override
+  WidgetClassDebugData toWidgetClassDebugData() => WidgetClassDebugData(
+        widgetParameters: {
+          'displayid': debugSerializeParam(
+            widget?.displayid,
+            ParamType.String,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HomeUitgaanSliderComponentCopy',
+            searchReference:
+                'reference=ShsKEwoJZGlzcGxheWlkEgZ3ZWF3cmhyBAgDIABQAFoJZGlzcGxheWlk',
+            name: 'String',
+            nullable: true,
+          )
+        }.withoutNulls.entries,
+        widgetStates: {
+          'carouselCurrentIndex': debugSerializeParam(
+            carouselCurrentIndex,
+            ParamType.int,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HomeUitgaanSliderComponentCopy',
+            name: 'int',
+            nullable: true,
+          )
+        }.entries,
+        generatorVariables: debugGeneratorVariables.entries,
+        backendQueries: debugBackendQueries.entries,
+        componentStates: {
+          ...widgetBuilderComponents.map(
+            (key, value) => MapEntry(
+              key,
+              value.toWidgetClassDebugData(),
+            ),
+          ),
+        }.withoutNulls.entries,
+        dynamicComponentStates: {
+          'pUitgaanSliderKaartComponentModels (List<PUitgaanSliderKaartComponent>)':
+              DynamicWidgetClassDebugData(
+            componentStates: Map.fromIterables(
+              List.generate(pUitgaanSliderKaartComponentModels.length,
+                  (index) => '[$index]'),
+              pUitgaanSliderKaartComponentModels.values
+                  .map((e) => e.toWidgetClassDebugData()),
+            ).entries,
+          ),
+        }.withoutNulls.entries,
+        link:
+            'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd/tab=uiBuilder&page=HomeUitgaanSliderComponentCopy',
+        searchReference:
+            'reference=Oh5Ib21lVWl0Z2FhblNsaWRlckNvbXBvbmVudENvcHlQAFoeSG9tZVVpdGdhYW5TbGlkZXJDb21wb25lbnRDb3B5',
+        widgetClassName: 'HomeUitgaanSliderComponentCopy',
+      );
+}

+ 331 - 0
lib/uitgaanspaginas/home_uitgaan_slider_component_copy/home_uitgaan_slider_component_copy_widget.dart

@@ -0,0 +1,331 @@
+import '/backend/api_requests/api_calls.dart';
+import '/flutter_flow/flutter_flow_theme.dart';
+import '/flutter_flow/flutter_flow_util.dart';
+import '/flutter_flow/flutter_flow_widgets.dart';
+import '/uitgaanspaginas/p_uitgaan_slider_kaart_component/p_uitgaan_slider_kaart_component_widget.dart';
+import '/index.dart';
+import 'package:carousel_slider/carousel_slider.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_spinkit/flutter_spinkit.dart';
+import 'package:google_fonts/google_fonts.dart';
+import 'package:provider/provider.dart';
+import 'home_uitgaan_slider_component_copy_model.dart';
+export 'home_uitgaan_slider_component_copy_model.dart';
+
+class HomeUitgaanSliderComponentCopyWidget extends StatefulWidget {
+  const HomeUitgaanSliderComponentCopyWidget({
+    super.key,
+    this.displayid,
+  });
+
+  final String? displayid;
+
+  @override
+  State<HomeUitgaanSliderComponentCopyWidget> createState() =>
+      _HomeUitgaanSliderComponentCopyWidgetState();
+}
+
+class _HomeUitgaanSliderComponentCopyWidgetState
+    extends State<HomeUitgaanSliderComponentCopyWidget> with RouteAware {
+  late HomeUitgaanSliderComponentCopyModel _model;
+
+  @override
+  void setState(VoidCallback callback) {
+    super.setState(callback);
+    _model.onUpdate();
+  }
+
+  @override
+  void initState() {
+    super.initState();
+    _model = createModel(context, () => HomeUitgaanSliderComponentCopyModel());
+  }
+
+  @override
+  void dispose() {
+    routeObserver.unsubscribe(this);
+
+    _model.maybeDispose();
+
+    super.dispose();
+  }
+
+  @override
+  void didUpdateWidget(HomeUitgaanSliderComponentCopyWidget oldWidget) {
+    super.didUpdateWidget(oldWidget);
+    _model.widget = widget;
+  }
+
+  @override
+  void didChangeDependencies() {
+    super.didChangeDependencies();
+    final route = DebugModalRoute.of(context);
+    if (route != null) {
+      routeObserver.subscribe(this, route);
+    }
+    debugLogGlobalProperty(context);
+  }
+
+  @override
+  void didPopNext() {
+    if (mounted && DebugFlutterFlowModelContext.maybeOf(context) == null) {
+      setState(() => _model.isRouteVisible = true);
+      debugLogWidgetClass(_model);
+    }
+  }
+
+  @override
+  void didPush() {
+    if (mounted && DebugFlutterFlowModelContext.maybeOf(context) == null) {
+      setState(() => _model.isRouteVisible = true);
+      debugLogWidgetClass(_model);
+    }
+  }
+
+  @override
+  void didPop() {
+    _model.isRouteVisible = false;
+  }
+
+  @override
+  void didPushNext() {
+    _model.isRouteVisible = false;
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    DebugFlutterFlowModelContext.maybeOf(context)
+        ?.parentModelCallback
+        ?.call(_model);
+    _model.pUitgaanSliderKaartComponentModels.clear();
+
+    return Builder(
+      builder: (context) {
+        if (valueOrDefault<bool>(
+          widget!.displayid == widget!.displayid,
+          true,
+        )) {
+          return Padding(
+            padding: EdgeInsetsDirectional.fromSTEB(0.0, 15.0, 0.0, 15.0),
+            child: Container(
+              width: MediaQuery.sizeOf(context).width * 0.92,
+              height: MediaQuery.sizeOf(context).height * 0.32,
+              decoration: BoxDecoration(
+                shape: BoxShape.rectangle,
+              ),
+              child: Padding(
+                padding: EdgeInsetsDirectional.fromSTEB(8.0, 0.0, 8.0, 0.0),
+                child: FutureBuilder<ApiCallResponse>(
+                  future: HomeSliderCall.call(
+                    displayId: widget!.displayid,
+                  ),
+                  builder: (context, snapshot) {
+                    // Customize what your widget looks like when it's loading.
+                    if (!snapshot.hasData) {
+                      return Center(
+                        child: SizedBox(
+                          width: 80.0,
+                          height: 80.0,
+                          child: SpinKitFadingCircle(
+                            color: FlutterFlowTheme.of(context).primary,
+                            size: 80.0,
+                          ),
+                        ),
+                      );
+                    }
+                    final carouselHomeSliderResponse = snapshot.data!;
+                    _model.debugBackendQueries[
+                            'HomeSliderCall_statusCode_Carousel_lohx8ayf'] =
+                        debugSerializeParam(
+                      carouselHomeSliderResponse.statusCode,
+                      ParamType.int,
+                      link:
+                          'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HomeUitgaanSliderComponentCopy',
+                      name: 'int',
+                      nullable: false,
+                    );
+                    _model.debugBackendQueries[
+                            'HomeSliderCall_responseBody_Carousel_lohx8ayf'] =
+                        debugSerializeParam(
+                      carouselHomeSliderResponse.bodyText,
+                      ParamType.String,
+                      link:
+                          'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HomeUitgaanSliderComponentCopy',
+                      name: 'String',
+                      nullable: false,
+                    );
+                    debugLogWidgetClass(_model);
+
+                    return Builder(
+                      builder: (context) {
+                        final homeslider = getJsonField(
+                          carouselHomeSliderResponse.jsonBody,
+                          r'''$''',
+                        ).toList().take(12).toList();
+                        if (homeslider.isEmpty) {
+                          return Image.asset(
+                            'assets/images/logo800px.png',
+                          );
+                        }
+                        _model.debugGeneratorVariables[
+                                'homeslider${homeslider.length > 100 ? ' (first 100)' : ''}'] =
+                            debugSerializeParam(
+                          homeslider.take(100),
+                          ParamType.JSON,
+                          isList: true,
+                          link:
+                              'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HomeUitgaanSliderComponentCopy',
+                          name: 'dynamic',
+                          nullable: false,
+                        );
+                        debugLogWidgetClass(_model);
+
+                        return Container(
+                          width: double.infinity,
+                          height: () {
+                            if (MediaQuery.sizeOf(context).width <
+                                kBreakpointSmall) {
+                              return 180.0;
+                            } else if (MediaQuery.sizeOf(context).width <
+                                kBreakpointMedium) {
+                              return 220.0;
+                            } else if (MediaQuery.sizeOf(context).width <
+                                kBreakpointLarge) {
+                              return 260.0;
+                            } else {
+                              return 300.0;
+                            }
+                          }(),
+                          child: CarouselSlider.builder(
+                            itemCount: homeslider.length,
+                            itemBuilder: (context, homesliderIndex, _) {
+                              final homesliderItem =
+                                  homeslider[homesliderIndex];
+                              return InkWell(
+                                splashColor: Colors.transparent,
+                                focusColor: Colors.transparent,
+                                hoverColor: Colors.transparent,
+                                highlightColor: Colors.transparent,
+                                onTap: () async {
+                                  context.pushNamed(
+                                    EventCurrentWidget.routeName,
+                                    queryParameters: {
+                                      'nid': serializeParam(
+                                        getJsonField(
+                                          homesliderItem,
+                                          r'''$.nid''',
+                                        ).toString(),
+                                        ParamType.String,
+                                      ),
+                                      'horecaid': serializeParam(
+                                        getJsonField(
+                                          homesliderItem,
+                                          r'''$.horecagelegenheidid''',
+                                        ).toString(),
+                                        ParamType.String,
+                                      ),
+                                    }.withoutNulls,
+                                  );
+                                },
+                                child: Stack(
+                                  children: [
+                                    Builder(builder: (_) {
+                                      return DebugFlutterFlowModelContext(
+                                        rootModel: _model.rootModel,
+                                        parentModelCallback: (m) {
+                                          _model.pUitgaanSliderKaartComponentModels[
+                                              'Keyk15_${homesliderIndex}_of_${homeslider.length}'] = m;
+                                        },
+                                        child:
+                                            PUitgaanSliderKaartComponentWidget(
+                                          key: Key(
+                                              'Keyk15_${homesliderIndex}_of_${homeslider.length}'),
+                                          logo: getJsonField(
+                                            homesliderItem,
+                                            r'''$.logo''',
+                                          ).toString(),
+                                          categorie: (getJsonField(
+                                            homesliderItem,
+                                            r'''$.categorie''',
+                                            true,
+                                          ) as List?)
+                                              ?.map<String>((e) => e.toString())
+                                              .toList()
+                                              .cast<String>(),
+                                          titel: getJsonField(
+                                            homesliderItem,
+                                            r'''$.titel''',
+                                          ).toString(),
+                                          datum: getJsonField(
+                                            homesliderItem,
+                                            r'''$.datum''',
+                                          ).toString(),
+                                          horecagelegenheid: getJsonField(
+                                            homesliderItem,
+                                            r'''$.horecagelegenheid''',
+                                          ).toString(),
+                                          adres: getJsonField(
+                                            homesliderItem,
+                                            r'''$.adres''',
+                                          ).toString(),
+                                          plaats: getJsonField(
+                                            homesliderItem,
+                                            r'''$.plaats''',
+                                          ).toString(),
+                                        ),
+                                      );
+                                    }),
+                                  ],
+                                ),
+                              );
+                            },
+                            carouselController: _model.carouselController ??=
+                                CarouselSliderController(),
+                            options: CarouselOptions(
+                              initialPage:
+                                  max(0, min(1, homeslider.length - 1)),
+                              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,
+                              enableInfiniteScroll: true,
+                              scrollDirection: Axis.horizontal,
+                              autoPlay: false,
+                              onPageChanged: (index, _) =>
+                                  _model.carouselCurrentIndex = index,
+                            ),
+                          ),
+                        );
+                      },
+                    );
+                  },
+                ),
+              ),
+            ),
+          );
+        } else {
+          return Container(
+            width: 100.0,
+            height: 100.0,
+            decoration: BoxDecoration(
+              color: FlutterFlowTheme.of(context).secondaryBackground,
+            ),
+          );
+        }
+      },
+    );
+  }
+}

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

@@ -155,10 +155,12 @@ class _PUitgaanSliderComponentWidgetState
 
 
               return Builder(
               return Builder(
                 builder: (context) {
                 builder: (context) {
-                  final homeslider = getJsonField(
-                    carouselUitgaanSliderResponse.jsonBody,
-                    r'''$''',
-                  ).toList().take(12).toList();
+                  final homeslider = (UitgaanSliderCall.items(
+                            carouselUitgaanSliderResponse.jsonBody,
+                          )?.toList() ??
+                          [])
+                      .take(12)
+                      .toList();
                   if (homeslider.isEmpty) {
                   if (homeslider.isEmpty) {
                     return Image.asset(
                     return Image.asset(
                       'assets/images/logo800px.png',
                       'assets/images/logo800px.png',

+ 5 - 0
lib/uitgaanspaginas/p_uitgaan_slider_kaart_component/p_uitgaan_slider_kaart_component_widget.dart

@@ -215,6 +215,7 @@ class _PUitgaanSliderKaartComponentWidgetState
                                   .titleLarge
                                   .titleLarge
                                   .fontStyle,
                                   .fontStyle,
                             ),
                             ),
+                        overflow: TextOverflow.ellipsis,
                       ),
                       ),
                     ),
                     ),
                     Row(
                     Row(
@@ -271,6 +272,7 @@ class _PUitgaanSliderKaartComponentWidgetState
                               alignment: AlignmentDirectional(-0.98, -0.42),
                               alignment: AlignmentDirectional(-0.98, -0.42),
                               child: Text(
                               child: Text(
                                 widget!.horecagelegenheid!,
                                 widget!.horecagelegenheid!,
+                                maxLines: 1,
                                 style: FlutterFlowTheme.of(context)
                                 style: FlutterFlowTheme.of(context)
                                     .bodyMedium
                                     .bodyMedium
                                     .override(
                                     .override(
@@ -290,6 +292,7 @@ class _PUitgaanSliderKaartComponentWidgetState
                                           .bodyMedium
                                           .bodyMedium
                                           .fontStyle,
                                           .fontStyle,
                                     ),
                                     ),
+                                overflow: TextOverflow.ellipsis,
                               ),
                               ),
                             ),
                             ),
                           ),
                           ),
@@ -315,6 +318,7 @@ class _PUitgaanSliderKaartComponentWidgetState
                                 Text(
                                 Text(
                                   '${widget!.adres}, ${widget!.plaats}',
                                   '${widget!.adres}, ${widget!.plaats}',
                                   textAlign: TextAlign.start,
                                   textAlign: TextAlign.start,
+                                  maxLines: 2,
                                   style: FlutterFlowTheme.of(context)
                                   style: FlutterFlowTheme.of(context)
                                       .bodyMedium
                                       .bodyMedium
                                       .override(
                                       .override(
@@ -336,6 +340,7 @@ class _PUitgaanSliderKaartComponentWidgetState
                                             .bodyMedium
                                             .bodyMedium
                                             .fontStyle,
                                             .fontStyle,
                                       ),
                                       ),
+                                  overflow: TextOverflow.ellipsis,
                                 ),
                                 ),
                               ],
                               ],
                             ),
                             ),

+ 18 - 0
lib/wachtwoord_vergeten/wachtwoord_vergeten_model.dart

@@ -1,8 +1,10 @@
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_streaming.dart';
 import '/backend/api_requests/api_streaming.dart';
+import '/components/header_buttons_component_widget.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
+import '/shared/drawer_component/drawer_component_widget.dart';
 import 'dart:convert';
 import 'dart:convert';
 import 'dart:ui';
 import 'dart:ui';
 import 'wachtwoord_vergeten_widget.dart' show WachtwoordVergetenWidget;
 import 'wachtwoord_vergeten_widget.dart' show WachtwoordVergetenWidget;
@@ -29,11 +31,20 @@ class WachtwoordVergetenModel
 
 
   ApiCallResponse? get apiResultuoz => _apiResultuoz;
   ApiCallResponse? get apiResultuoz => _apiResultuoz;
 
 
+  // Model for HeaderButtonsComponent component.
+  late HeaderButtonsComponentModel headerButtonsComponentModel;
+  // Model for drawerComponent component.
+  late DrawerComponentModel drawerComponentModel;
+
   final Map<String, DebugDataField> debugGeneratorVariables = {};
   final Map<String, DebugDataField> debugGeneratorVariables = {};
   final Map<String, DebugDataField> debugBackendQueries = {};
   final Map<String, DebugDataField> debugBackendQueries = {};
   final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
   final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
   @override
   @override
   void initState(BuildContext context) {
   void initState(BuildContext context) {
+    headerButtonsComponentModel =
+        createModel(context, () => HeaderButtonsComponentModel());
+    drawerComponentModel = createModel(context, () => DrawerComponentModel());
+
     debugLogWidgetClass(this);
     debugLogWidgetClass(this);
   }
   }
 
 
@@ -41,6 +52,9 @@ class WachtwoordVergetenModel
   void dispose() {
   void dispose() {
     naamOfEmailFieldFocusNode?.dispose();
     naamOfEmailFieldFocusNode?.dispose();
     naamOfEmailFieldTextController?.dispose();
     naamOfEmailFieldTextController?.dispose();
+
+    headerButtonsComponentModel.dispose();
+    drawerComponentModel.dispose();
   }
   }
 
 
   @override
   @override
@@ -68,6 +82,10 @@ class WachtwoordVergetenModel
         generatorVariables: debugGeneratorVariables.entries,
         generatorVariables: debugGeneratorVariables.entries,
         backendQueries: debugBackendQueries.entries,
         backendQueries: debugBackendQueries.entries,
         componentStates: {
         componentStates: {
+          'headerButtonsComponentModel (HeaderButtonsComponent)':
+              headerButtonsComponentModel?.toWidgetClassDebugData(),
+          'drawerComponentModel (drawerComponent)':
+              drawerComponentModel?.toWidgetClassDebugData(),
           ...widgetBuilderComponents.map(
           ...widgetBuilderComponents.map(
             (key, value) => MapEntry(
             (key, value) => MapEntry(
               key,
               key,

+ 45 - 0
lib/wachtwoord_vergeten/wachtwoord_vergeten_widget.dart

@@ -1,8 +1,10 @@
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_calls.dart';
 import '/backend/api_requests/api_streaming.dart';
 import '/backend/api_requests/api_streaming.dart';
+import '/components/header_buttons_component_widget.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_theme.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
+import '/shared/drawer_component/drawer_component_widget.dart';
 import 'dart:convert';
 import 'dart:convert';
 import 'dart:ui';
 import 'dart:ui';
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
@@ -106,6 +108,49 @@ class _WachtwoordVergetenWidgetState extends State<WachtwoordVergetenWidget>
       child: Scaffold(
       child: Scaffold(
         key: scaffoldKey,
         key: scaffoldKey,
         backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
         backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
+        drawer: Drawer(
+          elevation: 16.0,
+          child: wrapWithModel(
+            model: _model.drawerComponentModel,
+            updateCallback: () => safeSetState(() {}),
+            child: Builder(builder: (_) {
+              return DebugFlutterFlowModelContext(
+                rootModel: _model.rootModel,
+                child: DrawerComponentWidget(),
+              );
+            }),
+          ),
+        ),
+        appBar: PreferredSize(
+          preferredSize: Size.fromHeight(80.0),
+          child: AppBar(
+            backgroundColor: FlutterFlowTheme.of(context).info,
+            automaticallyImplyLeading: false,
+            actions: [],
+            flexibleSpace: FlexibleSpaceBar(
+              background: wrapWithModel(
+                model: _model.headerButtonsComponentModel,
+                updateCallback: () => safeSetState(() {}),
+                child: Builder(builder: (_) {
+                  return DebugFlutterFlowModelContext(
+                    rootModel: _model.rootModel,
+                    child: HeaderButtonsComponentWidget(
+                      showBackButton: true,
+                    ),
+                  );
+                }),
+              ),
+              centerTitle: true,
+              expandedTitleScale: 1.0,
+            ),
+            bottom: PreferredSize(
+              preferredSize: Size.fromHeight(70.0),
+              child: Container(),
+            ),
+            toolbarHeight: MediaQuery.sizeOf(context).height * 0.25,
+            elevation: 2.0,
+          ),
+        ),
         body: SafeArea(
         body: SafeArea(
           top: true,
           top: true,
           child: Column(
           child: Column(