소스 검색

P1-7 WIP: Favorieten Tab 2/3 herbouw op favorieten_gemeenten.json/favorieten_horeca.json

Checkpoint van Bob's lopende builder-sessie (export 2026-08-23 23:38), nog
niet afgerond. Bevat o.a. nieuwe favorieten_copy component (scratch-kopie
tijdens builder-iteratie) en kleine wijzigingen in nav.dart/index.dart/
uitgaantabel_kaart_widget.dart.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bob 3 주 전
부모
커밋
681fcd3b85

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

@@ -44,8 +44,8 @@
 		97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
 		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
-		6436409B27A31CD700820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		6436409F27A31CDD00820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409527A31CD600820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409327A31CDB00820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -225,8 +225,8 @@
 		6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
 			isa = PBXVariantGroup;
 			children = (
-				6436409B27A31CD700820AF7 /* nl */,
-				6436409F27A31CDD00820AF7 /* en */,
+				6436409527A31CD600820AF7 /* nl */,
+				6436409327A31CDB00820AF7 /* en */,
 			);
 			name = InfoPlist.strings;
 			sourceTree = "<group>";

+ 97 - 1
lib/favorieten/favorieten_model.dart

@@ -1,8 +1,8 @@
-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_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
+import '/horecagelegenhedenoverzicht/horecagelegenheidoverzicht_kaart/horecagelegenheidoverzicht_kaart_widget.dart';
 import '/shared/drawer_component/drawer_component_widget.dart';
 import '/uitgaanspaginas/uitgaantabel_kaart/uitgaantabel_kaart_widget.dart';
 import 'dart:ui';
@@ -40,6 +40,52 @@ class FavorietenModel extends FlutterFlowModel<FavorietenWidget> {
   void updateFavorietenAgendaAtIndex(int index, Function(dynamic) updateFn) =>
       favorietenAgenda[index] = updateFn(favorietenAgenda[index]);
 
+  late LoggableList<dynamic> _favorieteHorecagelegenheden = LoggableList([]);
+  set favorieteHorecagelegenheden(List<dynamic> value) {
+    if (value != null) {
+      _favorieteHorecagelegenheden = LoggableList(value);
+    }
+
+    debugLogWidgetClass(this);
+  }
+
+  List<dynamic> get favorieteHorecagelegenheden =>
+      _favorieteHorecagelegenheden?..logger = () => debugLogWidgetClass(this);
+  void addToFavorieteHorecagelegenheden(dynamic item) =>
+      favorieteHorecagelegenheden.add(item);
+  void removeFromFavorieteHorecagelegenheden(dynamic item) =>
+      favorieteHorecagelegenheden.remove(item);
+  void removeAtIndexFromFavorieteHorecagelegenheden(int index) =>
+      favorieteHorecagelegenheden.removeAt(index);
+  void insertAtIndexInFavorieteHorecagelegenheden(int index, dynamic item) =>
+      favorieteHorecagelegenheden.insert(index, item);
+  void updateFavorieteHorecagelegenhedenAtIndex(
+          int index, Function(dynamic) updateFn) =>
+      favorieteHorecagelegenheden[index] =
+          updateFn(favorieteHorecagelegenheden[index]);
+
+  late LoggableList<dynamic> _favorietenGemeenten = LoggableList([]);
+  set favorietenGemeenten(List<dynamic> value) {
+    if (value != null) {
+      _favorietenGemeenten = LoggableList(value);
+    }
+
+    debugLogWidgetClass(this);
+  }
+
+  List<dynamic> get favorietenGemeenten =>
+      _favorietenGemeenten?..logger = () => debugLogWidgetClass(this);
+  void addToFavorietenGemeenten(dynamic item) => favorietenGemeenten.add(item);
+  void removeFromFavorietenGemeenten(dynamic item) =>
+      favorietenGemeenten.remove(item);
+  void removeAtIndexFromFavorietenGemeenten(int index) =>
+      favorietenGemeenten.removeAt(index);
+  void insertAtIndexInFavorietenGemeenten(int index, dynamic item) =>
+      favorietenGemeenten.insert(index, item);
+  void updateFavorietenGemeentenAtIndex(
+          int index, Function(dynamic) updateFn) =>
+      favorietenGemeenten[index] = updateFn(favorietenGemeenten[index]);
+
   ///  State fields for stateful widgets in this page.
 
   // Stores action output result for [Custom Action - drupalRequest] action in favorieten widget.
@@ -70,6 +116,17 @@ class FavorietenModel extends FlutterFlowModel<FavorietenWidget> {
 
   // Models for UitgaantabelKaart dynamic component.
   Map<String, FlutterFlowModel> uitgaantabelKaartModels = {};
+  // Stores action output result for [Custom Action - drupalRequest] action in TabFavHoreca widget.
+  dynamic? _responseFavorieteHoreca;
+  set responseFavorieteHoreca(dynamic? value) {
+    _responseFavorieteHoreca = value;
+    debugLogWidgetClass(this);
+  }
+
+  dynamic? get responseFavorieteHoreca => _responseFavorieteHoreca;
+
+  // Models for HorecagelegenheidoverzichtKaart dynamic component.
+  Map<String, FlutterFlowModel> horecagelegenheidoverzichtKaartModels = {};
   // Model for drawerComponent component.
   late DrawerComponentModel drawerComponentModel;
   // Model for HeaderButtonsComponent component.
@@ -107,6 +164,28 @@ class FavorietenModel extends FlutterFlowModel<FavorietenWidget> {
                 'reference=QiEKGQoQZmF2b3JpZXRlbkFnZW5kYRIFNHd4dmdyBBICCAlQAVoQZmF2b3JpZXRlbkFnZW5kYWIKZmF2b3JpZXRlbg==',
             name: 'dynamic',
             nullable: false,
+          ),
+          'favorieteHorecagelegenheden': debugSerializeParam(
+            favorieteHorecagelegenheden,
+            ParamType.JSON,
+            isList: true,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorieten',
+            searchReference:
+                'reference=QiwKJAobZmF2b3JpZXRlSG9yZWNhZ2VsZWdlbmhlZGVuEgVyNTlwOHIEEgIICVABWhtmYXZvcmlldGVIb3JlY2FnZWxlZ2VuaGVkZW5iCmZhdm9yaWV0ZW4=',
+            name: 'dynamic',
+            nullable: false,
+          ),
+          'favorietenGemeenten': debugSerializeParam(
+            favorietenGemeenten,
+            ParamType.JSON,
+            isList: true,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorieten',
+            searchReference:
+                'reference=QiQKHAoTZmF2b3JpZXRlbkdlbWVlbnRlbhIFOXo4d2xyBBICCAlQAVoTZmF2b3JpZXRlbkdlbWVlbnRlbmIKZmF2b3JpZXRlbg==',
+            name: 'dynamic',
+            nullable: false,
           )
         }.entries,
         widgetStates: {
@@ -143,6 +222,14 @@ class FavorietenModel extends FlutterFlowModel<FavorietenWidget> {
                 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorieten',
             name: 'dynamic',
             nullable: true,
+          ),
+          'responseFavorieteHoreca': debugSerializeParam(
+            responseFavorieteHoreca,
+            ParamType.JSON,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorieten',
+            name: 'dynamic',
+            nullable: true,
           )
         }.entries,
         generatorVariables: debugGeneratorVariables.entries,
@@ -169,6 +256,15 @@ class FavorietenModel extends FlutterFlowModel<FavorietenWidget> {
                   .map((e) => e.toWidgetClassDebugData()),
             ).entries,
           ),
+          'horecagelegenheidoverzichtKaartModels (List<HorecagelegenheidoverzichtKaart>)':
+              DynamicWidgetClassDebugData(
+            componentStates: Map.fromIterables(
+              List.generate(horecagelegenheidoverzichtKaartModels.length,
+                  (index) => '[$index]'),
+              horecagelegenheidoverzichtKaartModels.values
+                  .map((e) => e.toWidgetClassDebugData()),
+            ).entries,
+          ),
         }.withoutNulls.entries,
         link:
             'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd/tab=uiBuilder&page=favorieten',

+ 241 - 139
lib/favorieten/favorieten_widget.dart

@@ -1,8 +1,8 @@
-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_util.dart';
 import '/flutter_flow/flutter_flow_widgets.dart';
+import '/horecagelegenhedenoverzicht/horecagelegenheidoverzicht_kaart/horecagelegenheidoverzicht_kaart_widget.dart';
 import '/shared/drawer_component/drawer_component_widget.dart';
 import '/uitgaanspaginas/uitgaantabel_kaart/uitgaantabel_kaart_widget.dart';
 import 'dart:ui';
@@ -122,6 +122,7 @@ class _FavorietenWidgetState extends State<FavorietenWidget>
         ?.call(_model);
     context.watch<FFAppState>();
     _model.uitgaantabelKaartModels.clear();
+    _model.horecagelegenheidoverzichtKaartModels.clear();
 
     return GestureDetector(
       onTap: () {
@@ -265,8 +266,39 @@ class _FavorietenWidgetState extends State<FavorietenWidget>
 
                               safeSetState(() {});
                             },
-                            () async {},
-                            () async {},
+                            () async {
+                              await actions.drupalRequest(
+                                'GET',
+                                'https://uitgaanskrant.com/nl/flutterdrup/favorieten_gemeenten.json',
+                                FFAppState().userSessionname,
+                                FFAppState().userSessionid,
+                                FFAppState().userToken,
+                                '',
+                              );
+                              _model.favorietenGemeenten = _model
+                                  .responsActionDrupalRequest!
+                                  .toList()
+                                  .cast<dynamic>();
+                              safeSetState(() {});
+                            },
+                            () async {
+                              _model.responseFavorieteHoreca =
+                                  await actions.drupalRequest(
+                                'GET',
+                                'https://uitgaanskrant.com/nl/flutterdrup/favorieten_horeca.json',
+                                FFAppState().userSessionname,
+                                FFAppState().userSessionid,
+                                FFAppState().userToken,
+                                '',
+                              );
+                              _model.favorieteHorecagelegenheden = _model
+                                  .responseFavorieteHoreca!
+                                  .toList()
+                                  .cast<dynamic>();
+                              safeSetState(() {});
+
+                              safeSetState(() {});
+                            },
                             () async {}
                           ][i]();
                         },
@@ -401,172 +433,156 @@ class _FavorietenWidgetState extends State<FavorietenWidget>
                                       ),
                                 ),
                               ),
-                            ],
-                          ),
-                          Column(
-                            mainAxisSize: MainAxisSize.max,
-                            children: [
-                              FutureBuilder<ApiCallResponse>(
-                                future: FavorietenAgendaCall.call(
-                                  sessionName: FFAppState().userSessionname,
-                                  sessionId: FFAppState().userSessionid,
-                                ),
-                                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: Color(0xFFB1061E),
-                                          size: 80.0,
-                                        ),
-                                      ),
-                                    );
-                                  }
-                                  final listViewFavorietenAgendaResponse =
-                                      snapshot.data!;
-                                  _model.debugBackendQueries[
-                                          'FavorietenAgendaCall_statusCode_ListView_5fedvgkl'] =
+                              Builder(
+                                builder: (context) {
+                                  final favorieteGemeenteItem =
+                                      _model.favorietenGemeenten.toList();
+                                  _model.debugGeneratorVariables[
+                                          'favorieteGemeenteItem${favorieteGemeenteItem.length > 100 ? ' (first 100)' : ''}'] =
                                       debugSerializeParam(
-                                    listViewFavorietenAgendaResponse.statusCode,
-                                    ParamType.int,
+                                    favorieteGemeenteItem.take(100),
+                                    ParamType.JSON,
+                                    isList: true,
                                     link:
                                         'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorieten',
-                                    name: 'int',
-                                    nullable: false,
-                                  );
-                                  _model.debugBackendQueries[
-                                          'FavorietenAgendaCall_responseBody_ListView_5fedvgkl'] =
-                                      debugSerializeParam(
-                                    listViewFavorietenAgendaResponse.bodyText,
-                                    ParamType.String,
-                                    link:
-                                        'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorieten',
-                                    name: 'String',
+                                    name: 'dynamic',
                                     nullable: false,
                                   );
                                   debugLogWidgetClass(_model);
 
-                                  return Builder(
-                                    builder: (context) {
-                                      final favorieteGelegenheidItem =
-                                          listViewFavorietenAgendaResponse
-                                              .jsonBody
-                                              .toList();
-                                      if (favorieteGelegenheidItem.isEmpty) {
-                                        return Image.asset(
-                                          'assets/images/logo800px.png',
-                                        );
-                                      }
-                                      _model.debugGeneratorVariables[
-                                              'favorieteGelegenheidItem${favorieteGelegenheidItem.length > 100 ? ' (first 100)' : ''}'] =
-                                          debugSerializeParam(
-                                        favorieteGelegenheidItem.take(100),
-                                        ParamType.JSON,
-                                        isList: true,
-                                        link:
-                                            'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorieten',
-                                        name: 'dynamic',
-                                        nullable: false,
-                                      );
-                                      debugLogWidgetClass(_model);
-
-                                      return ListView.builder(
-                                        padding: EdgeInsets.zero,
-                                        shrinkWrap: true,
-                                        scrollDirection: Axis.vertical,
-                                        itemCount:
-                                            favorieteGelegenheidItem.length,
-                                        itemBuilder: (context,
-                                            favorieteGelegenheidItemIndex) {
-                                          final favorieteGelegenheidItemItem =
-                                              favorieteGelegenheidItem[
-                                                  favorieteGelegenheidItemIndex];
-                                          return InkWell(
-                                            splashColor: Colors.transparent,
-                                            focusColor: Colors.transparent,
-                                            hoverColor: Colors.transparent,
-                                            highlightColor: Colors.transparent,
-                                            onTap: () async {
-                                              context.pushNamed(
-                                                HorecagelegenheidCurrentWidget
-                                                    .routeName,
-                                                queryParameters: {
-                                                  'nid': serializeParam(
-                                                    getJsonField(
-                                                      favorieteGelegenheidItemItem,
-                                                      r'''$.nid''',
-                                                    ).toString(),
-                                                    ParamType.String,
+                                  return ListView.builder(
+                                    padding: EdgeInsets.zero,
+                                    shrinkWrap: true,
+                                    scrollDirection: Axis.vertical,
+                                    itemCount: favorieteGemeenteItem.length,
+                                    itemBuilder:
+                                        (context, favorieteGemeenteItemIndex) {
+                                      final favorieteGemeenteItemItem =
+                                          favorieteGemeenteItem[
+                                              favorieteGemeenteItemIndex];
+                                      return InkWell(
+                                        splashColor: Colors.transparent,
+                                        focusColor: Colors.transparent,
+                                        hoverColor: Colors.transparent,
+                                        highlightColor: Colors.transparent,
+                                        onTap: () async {
+                                          FFAppState().gemeenteSelectId =
+                                              getJsonField(
+                                            favorieteGemeenteItemItem,
+                                            r'''$.nid''',
+                                          ).toString();
+                                          FFAppState().gemeenteSelectNaam =
+                                              getJsonField(
+                                            favorieteGemeenteItemItem,
+                                            r'''$.titel''',
+                                          ).toString();
+                                          FFAppState().provincieSelectId =
+                                              getJsonField(
+                                            favorieteGemeenteItemItem,
+                                            r'''$.parent_nid''',
+                                          ).toString();
+                                          FFAppState().provincieSelectNaam =
+                                              getJsonField(
+                                            favorieteGemeenteItemItem,
+                                            r'''$.parent_titel''',
+                                          ).toString();
+                                          safeSetState(() {});
+
+                                          context
+                                              .pushNamed(HomeWidget.routeName);
+                                        },
+                                        child: Material(
+                                          color: Colors.transparent,
+                                          child: ListTile(
+                                            title: Text(
+                                              getJsonField(
+                                                favorieteGemeenteItemItem,
+                                                r'''$.titel''',
+                                              ).toString(),
+                                              style: FlutterFlowTheme.of(
+                                                      context)
+                                                  .titleLarge
+                                                  .override(
+                                                    font:
+                                                        GoogleFonts.interTight(
+                                                      fontWeight:
+                                                          FlutterFlowTheme.of(
+                                                                  context)
+                                                              .titleLarge
+                                                              .fontWeight,
+                                                      fontStyle:
+                                                          FlutterFlowTheme.of(
+                                                                  context)
+                                                              .titleLarge
+                                                              .fontStyle,
+                                                    ),
+                                                    letterSpacing: 0.0,
+                                                    fontWeight:
+                                                        FlutterFlowTheme.of(
+                                                                context)
+                                                            .titleLarge
+                                                            .fontWeight,
+                                                    fontStyle:
+                                                        FlutterFlowTheme.of(
+                                                                context)
+                                                            .titleLarge
+                                                            .fontStyle,
                                                   ),
-                                                }.withoutNulls,
-                                              );
-                                            },
-                                            child: Material(
-                                              color: Colors.transparent,
-                                              child: ListTile(
-                                                title: Text(
-                                                  getJsonField(
-                                                    favorieteGelegenheidItemItem,
-                                                    r'''$.node_title''',
-                                                  ).toString(),
-                                                  style: FlutterFlowTheme.of(
-                                                          context)
-                                                      .titleLarge
+                                            ),
+                                            subtitle: Text(
+                                              FFLocalizations.of(context)
+                                                  .getText(
+                                                'jm4s7cdn' /* Subtitle */,
+                                              ),
+                                              style:
+                                                  FlutterFlowTheme.of(context)
+                                                      .labelMedium
                                                       .override(
-                                                        font: GoogleFonts
-                                                            .interTight(
+                                                        font: GoogleFonts.inter(
                                                           fontWeight:
                                                               FlutterFlowTheme.of(
                                                                       context)
-                                                                  .titleLarge
+                                                                  .labelMedium
                                                                   .fontWeight,
                                                           fontStyle:
                                                               FlutterFlowTheme.of(
                                                                       context)
-                                                                  .titleLarge
+                                                                  .labelMedium
                                                                   .fontStyle,
                                                         ),
                                                         letterSpacing: 0.0,
                                                         fontWeight:
                                                             FlutterFlowTheme.of(
                                                                     context)
-                                                                .titleLarge
+                                                                .labelMedium
                                                                 .fontWeight,
                                                         fontStyle:
                                                             FlutterFlowTheme.of(
                                                                     context)
-                                                                .titleLarge
+                                                                .labelMedium
                                                                 .fontStyle,
                                                       ),
-                                                ),
-                                                trailing: Icon(
-                                                  Icons
-                                                      .arrow_forward_ios_rounded,
-                                                  color: FlutterFlowTheme.of(
-                                                          context)
+                                            ),
+                                            trailing: Icon(
+                                              Icons.arrow_forward_ios_rounded,
+                                              color:
+                                                  FlutterFlowTheme.of(context)
                                                       .secondaryText,
-                                                  size: 24.0,
-                                                ),
-                                                tileColor:
-                                                    FlutterFlowTheme.of(context)
-                                                        .secondaryBackground,
-                                                dense: false,
-                                                contentPadding:
-                                                    EdgeInsetsDirectional
-                                                        .fromSTEB(12.0, 0.0,
-                                                            12.0, 0.0),
-                                                shape: RoundedRectangleBorder(
-                                                  borderRadius:
-                                                      BorderRadius.circular(
-                                                          8.0),
-                                                ),
-                                              ),
+                                              size: 24.0,
                                             ),
-                                          );
-                                        },
+                                            tileColor:
+                                                FlutterFlowTheme.of(context)
+                                                    .secondaryBackground,
+                                            dense: false,
+                                            contentPadding:
+                                                EdgeInsetsDirectional.fromSTEB(
+                                                    12.0, 0.0, 12.0, 0.0),
+                                            shape: RoundedRectangleBorder(
+                                              borderRadius:
+                                                  BorderRadius.circular(8.0),
+                                            ),
+                                          ),
+                                        ),
                                       );
                                     },
                                   );
@@ -574,6 +590,92 @@ class _FavorietenWidgetState extends State<FavorietenWidget>
                               ),
                             ],
                           ),
+                          Column(
+                            mainAxisSize: MainAxisSize.max,
+                            children: [
+                              Expanded(
+                                child: Builder(
+                                  builder: (context) {
+                                    final favorieteHorecagelegenheid = _model
+                                        .favorieteHorecagelegenheden
+                                        .toList();
+                                    _model.debugGeneratorVariables[
+                                            'favorieteHorecagelegenheid${favorieteHorecagelegenheid.length > 100 ? ' (first 100)' : ''}'] =
+                                        debugSerializeParam(
+                                      favorieteHorecagelegenheid.take(100),
+                                      ParamType.JSON,
+                                      isList: true,
+                                      link:
+                                          'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorieten',
+                                      name: 'dynamic',
+                                      nullable: false,
+                                    );
+                                    debugLogWidgetClass(_model);
+
+                                    return MasonryGridView.builder(
+                                      gridDelegate:
+                                          SliverSimpleGridDelegateWithFixedCrossAxisCount(
+                                        crossAxisCount: 2,
+                                      ),
+                                      crossAxisSpacing: 10.0,
+                                      mainAxisSpacing: 10.0,
+                                      itemCount:
+                                          favorieteHorecagelegenheid.length,
+                                      itemBuilder: (context,
+                                          favorieteHorecagelegenheidIndex) {
+                                        final favorieteHorecagelegenheidItem =
+                                            favorieteHorecagelegenheid[
+                                                favorieteHorecagelegenheidIndex];
+                                        return Builder(builder: (_) {
+                                          return DebugFlutterFlowModelContext(
+                                            rootModel: _model.rootModel,
+                                            parentModelCallback: (m) {
+                                              _model.horecagelegenheidoverzichtKaartModels[
+                                                  'Keycet_${favorieteHorecagelegenheidIndex}_of_${favorieteHorecagelegenheid.length}'] = m;
+                                            },
+                                            child:
+                                                HorecagelegenheidoverzichtKaartWidget(
+                                              key: Key(
+                                                  'Keycet_${favorieteHorecagelegenheidIndex}_of_${favorieteHorecagelegenheid.length}'),
+                                              titel: getJsonField(
+                                                favorieteHorecagelegenheidItem,
+                                                r'''$.titel''',
+                                              ).toString(),
+                                              logo: getJsonField(
+                                                favorieteHorecagelegenheidItem,
+                                                r'''$.logo''',
+                                              ).toString(),
+                                              nid: getJsonField(
+                                                favorieteHorecagelegenheidItem,
+                                                r'''$.nid''',
+                                              ).toString(),
+                                              adres: getJsonField(
+                                                favorieteHorecagelegenheidItem,
+                                                r'''$.adres''',
+                                              ).toString(),
+                                              plaats: getJsonField(
+                                                favorieteHorecagelegenheidItem,
+                                                r'''$.plaats''',
+                                              ).toString(),
+                                              categorie: (getJsonField(
+                                                favorieteHorecagelegenheidItem,
+                                                r'''$.categorie''',
+                                                true,
+                                              ) as List?)
+                                                  ?.map<String>(
+                                                      (e) => e.toString())
+                                                  .toList()
+                                                  .cast<String>(),
+                                            ),
+                                          );
+                                        });
+                                      },
+                                    );
+                                  },
+                                ),
+                              ),
+                            ],
+                          ),
                           Column(
                             mainAxisSize: MainAxisSize.max,
                             children: [

+ 230 - 0
lib/favorieten_copy/favorieten_copy_model.dart

@@ -0,0 +1,230 @@
+import '/components/header_buttons_component_widget.dart';
+import '/flutter_flow/flutter_flow_theme.dart';
+import '/flutter_flow/flutter_flow_util.dart';
+import '/flutter_flow/flutter_flow_widgets.dart';
+import '/shared/drawer_component/drawer_component_widget.dart';
+import '/uitgaanspaginas/uitgaantabel_kaart/uitgaantabel_kaart_widget.dart';
+import 'dart:ui';
+import '/custom_code/actions/index.dart' as actions;
+import '/index.dart';
+import 'favorieten_copy_widget.dart' show FavorietenCopyWidget;
+import 'package:flutter/material.dart';
+import 'package:flutter/scheduler.dart';
+import 'package:flutter_spinkit/flutter_spinkit.dart';
+import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
+import 'package:google_fonts/google_fonts.dart';
+import 'package:provider/provider.dart';
+
+class FavorietenCopyModel extends FlutterFlowModel<FavorietenCopyWidget> {
+  ///  Local state fields for this page.
+
+  late LoggableList<dynamic> _favorietenAgenda = LoggableList([]);
+  set favorietenAgenda(List<dynamic> value) {
+    if (value != null) {
+      _favorietenAgenda = LoggableList(value);
+    }
+
+    debugLogWidgetClass(this);
+  }
+
+  List<dynamic> get favorietenAgenda =>
+      _favorietenAgenda?..logger = () => debugLogWidgetClass(this);
+  void addToFavorietenAgenda(dynamic item) => favorietenAgenda.add(item);
+  void removeFromFavorietenAgenda(dynamic item) =>
+      favorietenAgenda.remove(item);
+  void removeAtIndexFromFavorietenAgenda(int index) =>
+      favorietenAgenda.removeAt(index);
+  void insertAtIndexInFavorietenAgenda(int index, dynamic item) =>
+      favorietenAgenda.insert(index, item);
+  void updateFavorietenAgendaAtIndex(int index, Function(dynamic) updateFn) =>
+      favorietenAgenda[index] = updateFn(favorietenAgenda[index]);
+
+  late LoggableList<dynamic> _favorieteHorecagelegenheden = LoggableList([]);
+  set favorieteHorecagelegenheden(List<dynamic> value) {
+    if (value != null) {
+      _favorieteHorecagelegenheden = LoggableList(value);
+    }
+
+    debugLogWidgetClass(this);
+  }
+
+  List<dynamic> get favorieteHorecagelegenheden =>
+      _favorieteHorecagelegenheden?..logger = () => debugLogWidgetClass(this);
+  void addToFavorieteHorecagelegenheden(dynamic item) =>
+      favorieteHorecagelegenheden.add(item);
+  void removeFromFavorieteHorecagelegenheden(dynamic item) =>
+      favorieteHorecagelegenheden.remove(item);
+  void removeAtIndexFromFavorieteHorecagelegenheden(int index) =>
+      favorieteHorecagelegenheden.removeAt(index);
+  void insertAtIndexInFavorieteHorecagelegenheden(int index, dynamic item) =>
+      favorieteHorecagelegenheden.insert(index, item);
+  void updateFavorieteHorecagelegenhedenAtIndex(
+          int index, Function(dynamic) updateFn) =>
+      favorieteHorecagelegenheden[index] =
+          updateFn(favorieteHorecagelegenheden[index]);
+
+  ///  State fields for stateful widgets in this page.
+
+  // Stores action output result for [Custom Action - drupalRequest] action in favorietenCopy widget.
+  dynamic? _responseActionDrupalRequestPageLoad;
+  set responseActionDrupalRequestPageLoad(dynamic? value) {
+    _responseActionDrupalRequestPageLoad = value;
+    debugLogWidgetClass(this);
+  }
+
+  dynamic? get responseActionDrupalRequestPageLoad =>
+      _responseActionDrupalRequestPageLoad;
+
+  // State field(s) for TabBar widget.
+  TabController? tabBarController;
+  int get tabBarCurrentIndex =>
+      tabBarController != null ? tabBarController!.index : 0;
+  int get tabBarPreviousIndex =>
+      tabBarController != null ? tabBarController!.previousIndex : 0;
+
+  // Stores action output result for [Custom Action - drupalRequest] action in TabPersAgenda widget.
+  dynamic? _responsActionDrupalRequest;
+  set responsActionDrupalRequest(dynamic? value) {
+    _responsActionDrupalRequest = value;
+    debugLogWidgetClass(this);
+  }
+
+  dynamic? get responsActionDrupalRequest => _responsActionDrupalRequest;
+
+  // Models for UitgaantabelKaart dynamic component.
+  Map<String, FlutterFlowModel> uitgaantabelKaartModels = {};
+  // Stores action output result for [Custom Action - drupalRequest] action in TabFavHoreca widget.
+  dynamic? _responseFavorieteHoreca;
+  set responseFavorieteHoreca(dynamic? value) {
+    _responseFavorieteHoreca = value;
+    debugLogWidgetClass(this);
+  }
+
+  dynamic? get responseFavorieteHoreca => _responseFavorieteHoreca;
+
+  // Model for drawerComponent component.
+  late DrawerComponentModel drawerComponentModel;
+  // Model for HeaderButtonsComponent component.
+  late HeaderButtonsComponentModel headerButtonsComponentModel;
+
+  final Map<String, DebugDataField> debugGeneratorVariables = {};
+  final Map<String, DebugDataField> debugBackendQueries = {};
+  final Map<String, FlutterFlowModel> widgetBuilderComponents = {};
+  @override
+  void initState(BuildContext context) {
+    drawerComponentModel = createModel(context, () => DrawerComponentModel());
+    headerButtonsComponentModel =
+        createModel(context, () => HeaderButtonsComponentModel());
+
+    debugLogWidgetClass(this);
+  }
+
+  @override
+  void dispose() {
+    tabBarController?.dispose();
+    drawerComponentModel.dispose();
+    headerButtonsComponentModel.dispose();
+  }
+
+  @override
+  WidgetClassDebugData toWidgetClassDebugData() => WidgetClassDebugData(
+        localStates: {
+          'favorietenAgenda': debugSerializeParam(
+            favorietenAgenda,
+            ParamType.JSON,
+            isList: true,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorietenCopy',
+            searchReference:
+                'reference=QiEKGQoQZmF2b3JpZXRlbkFnZW5kYRIFNHd4dmdyBBICCAlQAVoQZmF2b3JpZXRlbkFnZW5kYWIOZmF2b3JpZXRlbkNvcHk=',
+            name: 'dynamic',
+            nullable: false,
+          ),
+          'favorieteHorecagelegenheden': debugSerializeParam(
+            favorieteHorecagelegenheden,
+            ParamType.JSON,
+            isList: true,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorietenCopy',
+            searchReference:
+                'reference=QiwKJAobZmF2b3JpZXRlSG9yZWNhZ2VsZWdlbmhlZGVuEgVyNTlwOHIEEgIICVABWhtmYXZvcmlldGVIb3JlY2FnZWxlZ2VuaGVkZW5iDmZhdm9yaWV0ZW5Db3B5',
+            name: 'dynamic',
+            nullable: false,
+          )
+        }.entries,
+        widgetStates: {
+          'tabBarCurrentIndex': debugSerializeParam(
+            tabBarCurrentIndex,
+            ParamType.int,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorietenCopy',
+            name: 'int',
+            nullable: true,
+          ),
+          'tabBarPreviousIndex': debugSerializeParam(
+            tabBarPreviousIndex,
+            ParamType.int,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorietenCopy',
+            name: 'int',
+            nullable: true,
+          )
+        }.entries,
+        actionOutputs: {
+          'responseActionDrupalRequestPageLoad': debugSerializeParam(
+            responseActionDrupalRequestPageLoad,
+            ParamType.JSON,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorietenCopy',
+            name: 'dynamic',
+            nullable: true,
+          ),
+          'responsActionDrupalRequest': debugSerializeParam(
+            responsActionDrupalRequest,
+            ParamType.JSON,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorietenCopy',
+            name: 'dynamic',
+            nullable: true,
+          ),
+          'responseFavorieteHoreca': debugSerializeParam(
+            responseFavorieteHoreca,
+            ParamType.JSON,
+            link:
+                'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorietenCopy',
+            name: 'dynamic',
+            nullable: true,
+          )
+        }.entries,
+        generatorVariables: debugGeneratorVariables.entries,
+        backendQueries: debugBackendQueries.entries,
+        componentStates: {
+          'drawerComponentModel (drawerComponent)':
+              drawerComponentModel?.toWidgetClassDebugData(),
+          'headerButtonsComponentModel (HeaderButtonsComponent)':
+              headerButtonsComponentModel?.toWidgetClassDebugData(),
+          ...widgetBuilderComponents.map(
+            (key, value) => MapEntry(
+              key,
+              value.toWidgetClassDebugData(),
+            ),
+          ),
+        }.withoutNulls.entries,
+        dynamicComponentStates: {
+          'uitgaantabelKaartModels (List<UitgaantabelKaart>)':
+              DynamicWidgetClassDebugData(
+            componentStates: Map.fromIterables(
+              List.generate(
+                  uitgaantabelKaartModels.length, (index) => '[$index]'),
+              uitgaantabelKaartModels.values
+                  .map((e) => e.toWidgetClassDebugData()),
+            ).entries,
+          ),
+        }.withoutNulls.entries,
+        link:
+            'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd/tab=uiBuilder&page=favorietenCopy',
+        searchReference:
+            'reference=Og5mYXZvcmlldGVuQ29weVABWg5mYXZvcmlldGVuQ29weQ==',
+        widgetClassName: 'favorietenCopy',
+      );
+}

+ 637 - 0
lib/favorieten_copy/favorieten_copy_widget.dart

@@ -0,0 +1,637 @@
+import '/components/header_buttons_component_widget.dart';
+import '/flutter_flow/flutter_flow_theme.dart';
+import '/flutter_flow/flutter_flow_util.dart';
+import '/flutter_flow/flutter_flow_widgets.dart';
+import '/shared/drawer_component/drawer_component_widget.dart';
+import '/uitgaanspaginas/uitgaantabel_kaart/uitgaantabel_kaart_widget.dart';
+import 'dart:ui';
+import '/custom_code/actions/index.dart' as actions;
+import '/index.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/scheduler.dart';
+import 'package:flutter_spinkit/flutter_spinkit.dart';
+import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
+import 'package:google_fonts/google_fonts.dart';
+import 'package:provider/provider.dart';
+import 'favorieten_copy_model.dart';
+export 'favorieten_copy_model.dart';
+
+class FavorietenCopyWidget extends StatefulWidget {
+  const FavorietenCopyWidget({super.key});
+
+  static String routeName = 'favorietenCopy';
+  static String routePath = '/favorietenCopy';
+
+  @override
+  State<FavorietenCopyWidget> createState() => _FavorietenCopyWidgetState();
+}
+
+class _FavorietenCopyWidgetState extends State<FavorietenCopyWidget>
+    with TickerProviderStateMixin, RouteAware {
+  late FavorietenCopyModel _model;
+
+  final scaffoldKey = GlobalKey<ScaffoldState>();
+
+  @override
+  void initState() {
+    super.initState();
+    _model = createModel(context, () => FavorietenCopyModel());
+
+    // On page load action.
+    SchedulerBinding.instance.addPostFrameCallback((_) async {
+      _model.responseActionDrupalRequestPageLoad = await actions.drupalRequest(
+        'GET',
+        'https://uitgaanskrant.com/nl/flutterdrup/favorieten_agenda.json',
+        FFAppState().userSessionname,
+        FFAppState().userSessionid,
+        FFAppState().userToken,
+        '',
+      );
+      _model.favorietenAgenda =
+          _model.responseActionDrupalRequestPageLoad!.toList().cast<dynamic>();
+      safeSetState(() {});
+    });
+
+    _model.tabBarController = TabController(
+      vsync: this,
+      length: 4,
+      initialIndex: 0,
+    )
+      ..addListener(() => safeSetState(() {}))
+      ..addListener(() {
+        debugLogWidgetClass(_model);
+      });
+  }
+
+  @override
+  void dispose() {
+    routeObserver.unsubscribe(this);
+
+    _model.dispose();
+
+    super.dispose();
+  }
+
+  @override
+  void didUpdateWidget(FavorietenCopyWidget 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>();
+    _model.uitgaantabelKaartModels.clear();
+
+    return GestureDetector(
+      onTap: () {
+        FocusScope.of(context).unfocus();
+        FocusManager.instance.primaryFocus?.unfocus();
+      },
+      child: Scaffold(
+        key: scaffoldKey,
+        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(
+              title: wrapWithModel(
+                model: _model.headerButtonsComponentModel,
+                updateCallback: () => safeSetState(() {}),
+                child: Builder(builder: (_) {
+                  return DebugFlutterFlowModelContext(
+                    rootModel: _model.rootModel,
+                    child: HeaderButtonsComponentWidget(
+                      showBackButton: false,
+                    ),
+                  );
+                }),
+              ),
+              centerTitle: true,
+              expandedTitleScale: 1.0,
+            ),
+            elevation: 0.0,
+          ),
+        ),
+        body: SafeArea(
+          top: true,
+          child: Column(
+            mainAxisSize: MainAxisSize.max,
+            children: [
+              Expanded(
+                child: Column(
+                  children: [
+                    Align(
+                      alignment: Alignment(0.0, 0),
+                      child: TabBar(
+                        isScrollable: true,
+                        tabAlignment: TabAlignment.center,
+                        labelColor: FlutterFlowTheme.of(context).primaryText,
+                        unselectedLabelColor:
+                            FlutterFlowTheme.of(context).secondaryText,
+                        labelStyle:
+                            FlutterFlowTheme.of(context).titleMedium.override(
+                                  font: GoogleFonts.interTight(
+                                    fontWeight: FlutterFlowTheme.of(context)
+                                        .titleMedium
+                                        .fontWeight,
+                                    fontStyle: FlutterFlowTheme.of(context)
+                                        .titleMedium
+                                        .fontStyle,
+                                  ),
+                                  letterSpacing: 0.0,
+                                  fontWeight: FlutterFlowTheme.of(context)
+                                      .titleMedium
+                                      .fontWeight,
+                                  fontStyle: FlutterFlowTheme.of(context)
+                                      .titleMedium
+                                      .fontStyle,
+                                ),
+                        unselectedLabelStyle:
+                            FlutterFlowTheme.of(context).titleMedium.override(
+                                  font: GoogleFonts.interTight(
+                                    fontWeight: FlutterFlowTheme.of(context)
+                                        .titleMedium
+                                        .fontWeight,
+                                    fontStyle: FlutterFlowTheme.of(context)
+                                        .titleMedium
+                                        .fontStyle,
+                                  ),
+                                  letterSpacing: 0.0,
+                                  fontWeight: FlutterFlowTheme.of(context)
+                                      .titleMedium
+                                      .fontWeight,
+                                  fontStyle: FlutterFlowTheme.of(context)
+                                      .titleMedium
+                                      .fontStyle,
+                                ),
+                        indicatorColor: FlutterFlowTheme.of(context).primary,
+                        tabs: [
+                          Tab(
+                            text: FFLocalizations.of(context).getText(
+                              'sxsbwdh5' /* Persoonlijke agenda */,
+                            ),
+                          ),
+                          Tab(
+                            text: FFLocalizations.of(context).getText(
+                              '0n8r8p9y' /* Favoriete gemeenten */,
+                            ),
+                          ),
+                          Tab(
+                            text: FFLocalizations.of(context).getText(
+                              'onk58tcz' /* Favoriete Gelegenheden */,
+                            ),
+                          ),
+                          Tab(
+                            text: FFLocalizations.of(context).getText(
+                              'htdoblfs' /* Gebruiker */,
+                            ),
+                          ),
+                        ],
+                        controller: _model.tabBarController,
+                        onTap: (i) async {
+                          [
+                            () async {
+                              _model.responsActionDrupalRequest =
+                                  await actions.drupalRequest(
+                                'GET',
+                                'https://uitgaanskrant.com/nl/flutterdrup/favorieten_agenda.json',
+                                FFAppState().userSessionname,
+                                FFAppState().userSessionid,
+                                FFAppState().userToken,
+                                '',
+                              );
+                              _model.favorietenAgenda = _model
+                                  .responsActionDrupalRequest!
+                                  .toList()
+                                  .cast<dynamic>();
+                              safeSetState(() {});
+
+                              safeSetState(() {});
+                            },
+                            () async {},
+                            () async {
+                              _model.responseFavorieteHoreca =
+                                  await actions.drupalRequest(
+                                'GET',
+                                'https://uitgaanskrant.com/nl/flutterdrup/favorieten_horeca.json',
+                                FFAppState().userSessionname,
+                                FFAppState().userSessionid,
+                                FFAppState().userToken,
+                                '',
+                              );
+                              _model.favorieteHorecagelegenheden = _model
+                                  .responseFavorieteHoreca!
+                                  .toList()
+                                  .cast<dynamic>();
+                              safeSetState(() {});
+
+                              safeSetState(() {});
+                            },
+                            () async {}
+                          ][i]();
+                        },
+                      ),
+                    ),
+                    Expanded(
+                      child: TabBarView(
+                        controller: _model.tabBarController,
+                        children: [
+                          Column(
+                            mainAxisSize: MainAxisSize.max,
+                            children: [
+                              Expanded(
+                                child: Builder(
+                                  builder: (context) {
+                                    final favorietenAgendaItems =
+                                        _model.favorietenAgenda.toList();
+                                    _model.debugGeneratorVariables[
+                                            'favorietenAgendaItems${favorietenAgendaItems.length > 100 ? ' (first 100)' : ''}'] =
+                                        debugSerializeParam(
+                                      favorietenAgendaItems.take(100),
+                                      ParamType.JSON,
+                                      isList: true,
+                                      link:
+                                          'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorietenCopy',
+                                      name: 'dynamic',
+                                      nullable: false,
+                                    );
+                                    debugLogWidgetClass(_model);
+
+                                    return MasonryGridView.builder(
+                                      gridDelegate:
+                                          SliverSimpleGridDelegateWithFixedCrossAxisCount(
+                                        crossAxisCount: 2,
+                                      ),
+                                      crossAxisSpacing: 10.0,
+                                      mainAxisSpacing: 10.0,
+                                      itemCount: favorietenAgendaItems.length,
+                                      itemBuilder: (context,
+                                          favorietenAgendaItemsIndex) {
+                                        final favorietenAgendaItemsItem =
+                                            favorietenAgendaItems[
+                                                favorietenAgendaItemsIndex];
+                                        return Builder(builder: (_) {
+                                          return DebugFlutterFlowModelContext(
+                                            rootModel: _model.rootModel,
+                                            parentModelCallback: (m) {
+                                              _model.uitgaantabelKaartModels[
+                                                  'Key5m3_${favorietenAgendaItemsIndex}_of_${favorietenAgendaItems.length}'] = m;
+                                            },
+                                            child: UitgaantabelKaartWidget(
+                                              key: Key(
+                                                  'Key5m3_${favorietenAgendaItemsIndex}_of_${favorietenAgendaItems.length}'),
+                                              logo: getJsonField(
+                                                favorietenAgendaItemsItem,
+                                                r'''$.logo''',
+                                              ),
+                                              categorie: getJsonField(
+                                                favorietenAgendaItemsItem,
+                                                r'''$.categorie''',
+                                              ),
+                                              titel: getJsonField(
+                                                favorietenAgendaItemsItem,
+                                                r'''$.titel''',
+                                              ),
+                                              horecagelegenheid: getJsonField(
+                                                favorietenAgendaItemsItem,
+                                                r'''$.horecagelegenheid''',
+                                              ),
+                                              adres: getJsonField(
+                                                favorietenAgendaItemsItem,
+                                                r'''$.adres''',
+                                              ),
+                                              plaats: getJsonField(
+                                                favorietenAgendaItemsItem,
+                                                r'''$.plaats''',
+                                              ),
+                                              datum: getJsonField(
+                                                favorietenAgendaItemsItem,
+                                                r'''$.datum''',
+                                              ),
+                                              inhoud: null,
+                                              nid: getJsonField(
+                                                favorietenAgendaItemsItem,
+                                                r'''$.nid''',
+                                              ),
+                                              horecagelegenheidNid:
+                                                  getJsonField(
+                                                favorietenAgendaItemsItem,
+                                                r'''$.horecagelegenheidNid''',
+                                              ),
+                                            ),
+                                          );
+                                        });
+                                      },
+                                    );
+                                  },
+                                ),
+                              ),
+                            ],
+                          ),
+                          Column(
+                            mainAxisSize: MainAxisSize.max,
+                            children: [
+                              Padding(
+                                padding: EdgeInsetsDirectional.fromSTEB(
+                                    16.0, 0.0, 16.0, 0.0),
+                                child: Text(
+                                  FFLocalizations.of(context).getText(
+                                    '8f3r68yl' /* De gemeentes die je hebt gemar... */,
+                                  ),
+                                  style: FlutterFlowTheme.of(context)
+                                      .bodyMedium
+                                      .override(
+                                        font: GoogleFonts.inter(
+                                          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,
+                                      ),
+                                ),
+                              ),
+                            ],
+                          ),
+                          Column(
+                            mainAxisSize: MainAxisSize.max,
+                            children: [
+                              Builder(
+                                builder: (context) {
+                                  final favorieteGelegenheidItem = _model
+                                      .favorieteHorecagelegenheden
+                                      .toList();
+                                  if (favorieteGelegenheidItem.isEmpty) {
+                                    return Image.asset(
+                                      'assets/images/logo800px.png',
+                                    );
+                                  }
+                                  _model.debugGeneratorVariables[
+                                          'favorieteGelegenheidItem${favorieteGelegenheidItem.length > 100 ? ' (first 100)' : ''}'] =
+                                      debugSerializeParam(
+                                    favorieteGelegenheidItem.take(100),
+                                    ParamType.JSON,
+                                    isList: true,
+                                    link:
+                                        'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorietenCopy',
+                                    name: 'dynamic',
+                                    nullable: false,
+                                  );
+                                  debugLogWidgetClass(_model);
+
+                                  return ListView.builder(
+                                    padding: EdgeInsets.zero,
+                                    shrinkWrap: true,
+                                    scrollDirection: Axis.vertical,
+                                    itemCount: favorieteGelegenheidItem.length,
+                                    itemBuilder: (context,
+                                        favorieteGelegenheidItemIndex) {
+                                      final favorieteGelegenheidItemItem =
+                                          favorieteGelegenheidItem[
+                                              favorieteGelegenheidItemIndex];
+                                      return InkWell(
+                                        splashColor: Colors.transparent,
+                                        focusColor: Colors.transparent,
+                                        hoverColor: Colors.transparent,
+                                        highlightColor: Colors.transparent,
+                                        onTap: () async {
+                                          context.pushNamed(
+                                            HorecagelegenheidCurrentWidget
+                                                .routeName,
+                                            queryParameters: {
+                                              'nid': serializeParam(
+                                                getJsonField(
+                                                  favorieteGelegenheidItemItem,
+                                                  r'''$.nid''',
+                                                ).toString(),
+                                                ParamType.String,
+                                              ),
+                                            }.withoutNulls,
+                                          );
+                                        },
+                                        child: Material(
+                                          color: Colors.transparent,
+                                          child: ListTile(
+                                            title: Text(
+                                              getJsonField(
+                                                favorieteGelegenheidItemItem,
+                                                r'''$.node_title''',
+                                              ).toString(),
+                                              style: FlutterFlowTheme.of(
+                                                      context)
+                                                  .titleLarge
+                                                  .override(
+                                                    font:
+                                                        GoogleFonts.interTight(
+                                                      fontWeight:
+                                                          FlutterFlowTheme.of(
+                                                                  context)
+                                                              .titleLarge
+                                                              .fontWeight,
+                                                      fontStyle:
+                                                          FlutterFlowTheme.of(
+                                                                  context)
+                                                              .titleLarge
+                                                              .fontStyle,
+                                                    ),
+                                                    letterSpacing: 0.0,
+                                                    fontWeight:
+                                                        FlutterFlowTheme.of(
+                                                                context)
+                                                            .titleLarge
+                                                            .fontWeight,
+                                                    fontStyle:
+                                                        FlutterFlowTheme.of(
+                                                                context)
+                                                            .titleLarge
+                                                            .fontStyle,
+                                                  ),
+                                            ),
+                                            trailing: Icon(
+                                              Icons.arrow_forward_ios_rounded,
+                                              color:
+                                                  FlutterFlowTheme.of(context)
+                                                      .secondaryText,
+                                              size: 24.0,
+                                            ),
+                                            tileColor:
+                                                FlutterFlowTheme.of(context)
+                                                    .secondaryBackground,
+                                            dense: false,
+                                            contentPadding:
+                                                EdgeInsetsDirectional.fromSTEB(
+                                                    12.0, 0.0, 12.0, 0.0),
+                                            shape: RoundedRectangleBorder(
+                                              borderRadius:
+                                                  BorderRadius.circular(8.0),
+                                            ),
+                                          ),
+                                        ),
+                                      );
+                                    },
+                                  );
+                                },
+                              ),
+                            ],
+                          ),
+                          Column(
+                            mainAxisSize: MainAxisSize.max,
+                            children: [
+                              InkWell(
+                                splashColor: Colors.transparent,
+                                focusColor: Colors.transparent,
+                                hoverColor: Colors.transparent,
+                                highlightColor: Colors.transparent,
+                                onTap: () async {
+                                  FFAppState().deleteUserToken();
+                                  FFAppState().userToken = '';
+
+                                  FFAppState().deleteUserSessionid();
+                                  FFAppState().userSessionid = '';
+
+                                  FFAppState().deleteUserSessionname();
+                                  FFAppState().userSessionname = '';
+
+                                  FFAppState().deleteUserName();
+                                  FFAppState().userName = '';
+
+                                  FFAppState().deleteUserUid();
+                                  FFAppState().userUid = 0;
+
+                                  FFAppState().deleteUserMail();
+                                  FFAppState().userMail = '';
+
+                                  safeSetState(() {});
+
+                                  context.goNamed(LoginWidget.routeName);
+                                },
+                                child: Material(
+                                  color: Colors.transparent,
+                                  child: ListTile(
+                                    title: Text(
+                                      FFLocalizations.of(context).getText(
+                                        'xj88822s' /* Uitloggen */,
+                                      ),
+                                      style: FlutterFlowTheme.of(context)
+                                          .titleLarge
+                                          .override(
+                                            font: GoogleFonts.interTight(
+                                              fontWeight:
+                                                  FlutterFlowTheme.of(context)
+                                                      .titleLarge
+                                                      .fontWeight,
+                                              fontStyle:
+                                                  FlutterFlowTheme.of(context)
+                                                      .titleLarge
+                                                      .fontStyle,
+                                            ),
+                                            letterSpacing: 0.0,
+                                            fontWeight:
+                                                FlutterFlowTheme.of(context)
+                                                    .titleLarge
+                                                    .fontWeight,
+                                            fontStyle:
+                                                FlutterFlowTheme.of(context)
+                                                    .titleLarge
+                                                    .fontStyle,
+                                          ),
+                                    ),
+                                    trailing: Icon(
+                                      Icons.arrow_forward_ios_rounded,
+                                      color: FlutterFlowTheme.of(context)
+                                          .secondaryText,
+                                      size: 24.0,
+                                    ),
+                                    tileColor: FlutterFlowTheme.of(context)
+                                        .secondaryBackground,
+                                    dense: false,
+                                    contentPadding:
+                                        EdgeInsetsDirectional.fromSTEB(
+                                            12.0, 0.0, 12.0, 0.0),
+                                    shape: RoundedRectangleBorder(
+                                      borderRadius: BorderRadius.circular(8.0),
+                                    ),
+                                  ),
+                                ),
+                              ),
+                            ],
+                          ),
+                        ],
+                      ),
+                    ),
+                  ],
+                ),
+              ),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+}

+ 47 - 4
lib/flutter_flow/internationalization.dart

@@ -420,12 +420,12 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
       'nl': 'De gemeentes die je hebt gemarkeerd als favoriet.',
       'en': '',
     },
-    'ygk8aifq': {
-      'nl': 'Favoriete Gelegenheden',
+    'jm4s7cdn': {
+      'nl': 'Subtitle',
       'en': '',
     },
-    'zddkbm3e': {
-      'nl': '',
+    'ygk8aifq': {
+      'nl': 'Favoriete Gelegenheden',
       'en': '',
     },
     'jwojezxv': {
@@ -452,6 +452,45 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
       'en': 'Home',
     },
   },
+  // favorietenCopy
+  {
+    'sxsbwdh5': {
+      'nl': 'Persoonlijke agenda',
+      'en': '',
+    },
+    '0n8r8p9y': {
+      'nl': 'Favoriete gemeenten',
+      'en': '',
+    },
+    '8f3r68yl': {
+      'nl': 'De gemeentes die je hebt gemarkeerd als favoriet.',
+      'en': '',
+    },
+    'onk58tcz': {
+      'nl': 'Favoriete Gelegenheden',
+      'en': '',
+    },
+    'yvdkblxt': {
+      'nl': '',
+      'en': '',
+    },
+    'htdoblfs': {
+      'nl': 'Gebruiker',
+      'en': '',
+    },
+    'xj88822s': {
+      'nl': 'Uitloggen',
+      'en': '',
+    },
+    '1lttf4eu': {
+      'nl': '',
+      'en': '',
+    },
+    'bclqbfp9': {
+      'nl': 'Home',
+      'en': 'Home',
+    },
+  },
   // SelectStateDropDownComponent
   {
     'duloakue': {
@@ -773,6 +812,10 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
       'nl': ', ',
       'en': '',
     },
+    'q3hgdkv4': {
+      'nl': 'Binnenkort meer...',
+      'en': '',
+    },
   },
   // Miscellaneous
   {

+ 8 - 1
lib/flutter_flow/nav/nav.dart

@@ -52,7 +52,9 @@ const debugRouteLinkMap = {
   '/favorieten':
       'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorieten',
   '/kanweg':
-      'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=kanweg'
+      'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=kanweg',
+  '/favorietenCopy':
+      'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=favorietenCopy'
 };
 
 class AppStateNotifier extends ChangeNotifier {
@@ -233,6 +235,11 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter(
           name: KanwegWidget.routeName,
           path: KanwegWidget.routePath,
           builder: (context, params) => KanwegWidget(),
+        ),
+        FFRoute(
+          name: FavorietenCopyWidget.routeName,
+          path: FavorietenCopyWidget.routePath,
+          builder: (context, params) => FavorietenCopyWidget(),
         )
       ].map((r) => r.toRoute(appStateNotifier)).toList(),
       observers: [routeObserver],

+ 4 - 1
lib/horecagelegenhedenoverzicht/horecagelegenheidoverzicht_kaart/horecagelegenheidoverzicht_kaart_widget.dart

@@ -163,7 +163,8 @@ class _HorecagelegenheidoverzichtKaartWidgetState
                     children: [
                       Builder(
                         builder: (context) {
-                          if (widget!.logo != '') {
+                          if ((widget!.logo != '') &&
+                              (widget!.logo != null && widget!.logo != '')) {
                             return ClipRRect(
                               borderRadius: BorderRadius.circular(8.0),
                               child: OctoImage(
@@ -177,6 +178,8 @@ class _HorecagelegenheidoverzichtKaartWidgetState
                                 image: CachedNetworkImageProvider(
                                   widget!.logo!,
                                 ),
+                                width: 100.0,
+                                height: 100.0,
                                 fit: BoxFit.cover,
                               ),
                             );

+ 1 - 0
lib/index.dart

@@ -20,3 +20,4 @@ export '/wachtwoord_vergeten/wachtwoord_vergeten_widget.dart'
     show WachtwoordVergetenWidget;
 export '/favorieten/favorieten_widget.dart' show FavorietenWidget;
 export '/kanweg/kanweg/kanweg_widget.dart' show KanwegWidget;
+export '/favorieten_copy/favorieten_copy_widget.dart' show FavorietenCopyWidget;

+ 2 - 0
lib/uitgaanspaginas/home_uitgaantabel_kaart_component/home_uitgaantabel_kaart_component_widget.dart

@@ -266,6 +266,8 @@ class _HomeUitgaantabelKaartComponentWidgetState
                                                 r'''$.logo''',
                                               ).toString(),
                                             ),
+                                            width: double.infinity,
+                                            height: double.infinity,
                                             fit: BoxFit.fitHeight,
                                           ),
                                         );

+ 30 - 1
lib/uitgaanspaginas/uitgaantabel_kaart/uitgaantabel_kaart_widget.dart

@@ -202,6 +202,8 @@ class _UitgaantabelKaartWidgetState extends State<UitgaantabelKaartWidget>
                                   image: CachedNetworkImageProvider(
                                     widget!.logo!.toString(),
                                   ),
+                                  width: double.infinity,
+                                  height: double.infinity,
                                   fit: BoxFit.fitHeight,
                                 ),
                               );
@@ -541,7 +543,34 @@ class _UitgaantabelKaartWidgetState extends State<UitgaantabelKaartWidget>
                                       overflow: TextOverflow.ellipsis,
                                     );
                                   } else {
-                                    return Container();
+                                    return Text(
+                                      FFLocalizations.of(context).getText(
+                                        'q3hgdkv4' /* Binnenkort meer... */,
+                                      ),
+                                      style: FlutterFlowTheme.of(context)
+                                          .bodyMedium
+                                          .override(
+                                            font: GoogleFonts.inter(
+                                              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,
+                                          ),
+                                    );
                                   }
                                 },
                               ),