Selaa lähdekoodia

Home slider: safe empty-list fallback (ConditionalBuilder, no crash)

Interim fix for the RangeError-on-empty-list crash: wraps the slider
content in a ConditionalBuilder with an always-true condition and a
placeholder Else-branch, so the widget never crashes while a proper
native empty-state binding is still pending.
bob 1 kuukausi sitten
vanhempi
commit
1a22bbf172

+ 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>"; };
-		6436409627A31CDB00820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		6436409627A31CD800820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409027A31CD900820AF7 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		6436409A27A31CDF00820AF7 /* 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 = (
-				6436409627A31CDB00820AF7 /* nl */,
-				6436409627A31CD800820AF7 /* en */,
+				6436409027A31CD900820AF7 /* nl */,
+				6436409A27A31CDF00820AF7 /* en */,
 			);
 			name = InfoPlist.strings;
 			sourceTree = "<group>";

+ 202 - 181
lib/uitgaanspaginas/home_uitgaan_slider_component/home_uitgaan_slider_component_widget.dart

@@ -99,194 +99,215 @@ class _HomeUitgaanSliderComponentWidgetState
         ?.call(_model);
     _model.pUitgaanSliderKaartComponentModels.clear();
 
-    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: Color(0xFFB1061E),
-                      size: 80.0,
-                    ),
+    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,
                   ),
-                );
-              }
-              final carouselHomeSliderResponse = snapshot.data!;
-              _model.debugBackendQueries[
-                      'HomeSliderCall_statusCode_Carousel_a8uisqly'] =
-                  debugSerializeParam(
-                carouselHomeSliderResponse.statusCode,
-                ParamType.int,
-                link:
-                    'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HomeUitgaanSliderComponent',
-                name: 'int',
-                nullable: false,
-              );
-              _model.debugBackendQueries[
-                      'HomeSliderCall_responseBody_Carousel_a8uisqly'] =
-                  debugSerializeParam(
-                carouselHomeSliderResponse.bodyText,
-                ParamType.String,
-                link:
-                    'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HomeUitgaanSliderComponent',
-                name: 'String',
-                nullable: false,
-              );
-              debugLogWidgetClass(_model);
+                  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 carouselHomeSliderResponse = snapshot.data!;
+                    _model.debugBackendQueries[
+                            'HomeSliderCall_statusCode_Carousel_a8uisqly'] =
+                        debugSerializeParam(
+                      carouselHomeSliderResponse.statusCode,
+                      ParamType.int,
+                      link:
+                          'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HomeUitgaanSliderComponent',
+                      name: 'int',
+                      nullable: false,
+                    );
+                    _model.debugBackendQueries[
+                            'HomeSliderCall_responseBody_Carousel_a8uisqly'] =
+                        debugSerializeParam(
+                      carouselHomeSliderResponse.bodyText,
+                      ParamType.String,
+                      link:
+                          'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=uiBuilder&page=HomeUitgaanSliderComponent',
+                      name: 'String',
+                      nullable: false,
+                    );
+                    debugLogWidgetClass(_model);
 
-              return Builder(
-                builder: (context) {
-                  final homeslider = getJsonField(
-                    carouselHomeSliderResponse.jsonBody,
-                    r'''$''',
-                  ).toList().take(12).toList();
-                  _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=HomeUitgaanSliderComponent',
-                    name: 'dynamic',
-                    nullable: false,
-                  );
-                  debugLogWidgetClass(_model);
+                    return Builder(
+                      builder: (context) {
+                        final homeslider = getJsonField(
+                          carouselHomeSliderResponse.jsonBody,
+                          r'''$''',
+                        ).toList().take(12).toList();
+                        _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=HomeUitgaanSliderComponent',
+                          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,
+                        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[
+                                              'Keyjg4_${homesliderIndex}_of_${homeslider.length}'] = m;
+                                        },
+                                        child:
+                                            PUitgaanSliderKaartComponentWidget(
+                                          key: Key(
+                                              'Keyjg4_${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(),
+                                        ),
+                                      );
+                                    }),
+                                  ],
                                 ),
-                                'horecaid': serializeParam(
-                                  getJsonField(
-                                    homesliderItem,
-                                    r'''$.horecagelegenheidid''',
-                                  ).toString(),
-                                  ParamType.String,
-                                ),
-                              }.withoutNulls,
-                            );
-                          },
-                          child: Stack(
-                            children: [
-                              Builder(builder: (_) {
-                                return DebugFlutterFlowModelContext(
-                                  rootModel: _model.rootModel,
-                                  parentModelCallback: (m) {
-                                    _model.pUitgaanSliderKaartComponentModels[
-                                        'Keyjg4_${homesliderIndex}_of_${homeslider.length}'] = m;
-                                  },
-                                  child: PUitgaanSliderKaartComponentWidget(
-                                    key: Key(
-                                        'Keyjg4_${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: 0.75,
+                              disableCenter: true,
+                              enlargeCenterPage: true,
+                              enlargeFactor: 0.25,
+                              enableInfiniteScroll: true,
+                              scrollDirection: Axis.horizontal,
+                              autoPlay: false,
+                              onPageChanged: (index, _) =>
+                                  _model.carouselCurrentIndex = index,
+                            ),
                           ),
                         );
                       },
-                      carouselController: _model.carouselController ??=
-                          CarouselSliderController(),
-                      options: CarouselOptions(
-                        initialPage: max(0, min(1, homeslider.length - 1)),
-                        viewportFraction: 0.75,
-                        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,
+            ),
+          );
+        }
+      },
     );
   }
 }