@@ -15,30 +15,32 @@ import 'package:flutter/widgets.dart';
1515class ResponsiveGridView extends StatelessWidget {
1616 final Axis scrollDirection;
1717 final bool reverse;
18- final ScrollController controller;
19- final bool primary;
20- final ScrollPhysics physics;
18+ final ScrollController ? controller;
19+ final bool ? primary;
20+ final ScrollPhysics ? physics;
2121 final bool shrinkWrap;
22- final EdgeInsetsGeometry padding;
22+ final EdgeInsetsGeometry ? padding;
2323
2424 /// Align grid items together as a group.
2525 final AlignmentGeometry alignment;
2626
2727 /// A custom [SliverGridDelegate] with item size control.
2828 final ResponsiveGridDelegate gridDelegate;
2929 final IndexedWidgetBuilder itemBuilder;
30- final int itemCount;
31- final int maxRowCount;
30+ final int ? itemCount;
31+ final int ? maxRowCount;
3232 final bool addAutomaticKeepAlives;
3333 final bool addRepaintBoundaries;
3434 final bool addSemanticIndexes;
35- final double cacheExtent;
36- final int semanticChildCount;
35+ final double ? cacheExtent;
36+ final int ? semanticChildCount;
3737 final DragStartBehavior dragStartBehavior;
3838 final ScrollViewKeyboardDismissBehavior keyboardDismissBehavior;
39+ final Clip clipBehavior;
40+ final String ? restorationId;
3941
4042 ResponsiveGridView .builder ({
41- Key key,
43+ Key ? key,
4244 this .scrollDirection = Axis .vertical,
4345 this .reverse = false ,
4446 this .controller,
@@ -47,8 +49,8 @@ class ResponsiveGridView extends StatelessWidget {
4749 this .shrinkWrap = false ,
4850 this .padding,
4951 this .alignment = Alignment .centerLeft,
50- @ required this .gridDelegate,
51- @ required this .itemBuilder,
52+ required this .gridDelegate,
53+ required this .itemBuilder,
5254 this .itemCount,
5355 this .maxRowCount,
5456 this .addAutomaticKeepAlives = true ,
@@ -58,7 +60,9 @@ class ResponsiveGridView extends StatelessWidget {
5860 this .semanticChildCount,
5961 this .dragStartBehavior = DragStartBehavior .start,
6062 this .keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior .manual,
61- }) : assert (gridDelegate != null );
63+ this .clipBehavior = Clip .hardEdge,
64+ this .restorationId,
65+ });
6266
6367 @override
6468 Widget build (BuildContext context) {
@@ -69,11 +73,11 @@ class ResponsiveGridView extends StatelessWidget {
6973 // must be preserved for the [BoxScrollView] to calculate
7074 // an effective padding with SafeArea. Create a
7175 // temporary variable here to avoid overwriting null.
72- EdgeInsets paddingHolder = padding ?? EdgeInsets .zero;
76+ EdgeInsets paddingHolder = padding as EdgeInsets ? ?? EdgeInsets .zero;
7377 // The maximum number of items that can fit on one row.
7478 int crossAxisCount;
7579 // The maximum number of items that fit under the max row count.
76- int maxItemCount;
80+ int ? maxItemCount;
7781 // Manual padding adjustment for alignment.
7882 EdgeInsetsGeometry alignmentPadding;
7983 // The width of all items and padding.
@@ -86,15 +90,16 @@ class ResponsiveGridView extends StatelessWidget {
8690 if (gridDelegate.crossAxisExtent != null ) {
8791 // Fixed item size.
8892 crossAxisCount = (crossAxisExtent /
89- (gridDelegate.crossAxisExtent + gridDelegate.crossAxisSpacing))
93+ (gridDelegate.crossAxisExtent! + gridDelegate.crossAxisSpacing))
9094 .floor ();
9195 crossAxisWidth = crossAxisCount *
92- (gridDelegate.crossAxisExtent + gridDelegate.crossAxisSpacing) +
96+ (gridDelegate.crossAxisExtent! +
97+ gridDelegate.crossAxisSpacing) +
9398 paddingHolder.horizontal;
9499 } else if (gridDelegate.maxCrossAxisExtent != null ) {
95100 // Max item size.
96101 crossAxisCount = (crossAxisExtent /
97- (gridDelegate.maxCrossAxisExtent +
102+ (gridDelegate.maxCrossAxisExtent! +
98103 gridDelegate.crossAxisSpacing))
99104 .ceil ();
100105 final double usableCrossAxisExtent = crossAxisExtent -
@@ -107,7 +112,7 @@ class ResponsiveGridView extends StatelessWidget {
107112 } else {
108113 // Min item size.
109114 crossAxisCount = (crossAxisExtent /
110- (gridDelegate.minCrossAxisExtent +
115+ (gridDelegate.minCrossAxisExtent! +
111116 gridDelegate.crossAxisSpacing))
112117 .floor ();
113118 final double usableCrossAxisExtent = crossAxisExtent -
@@ -155,7 +160,7 @@ class ResponsiveGridView extends StatelessWidget {
155160 }
156161 // Force row limit by calculating item limit.
157162 if (maxRowCount != null ) {
158- maxItemCount = maxRowCount * crossAxisCount;
163+ maxItemCount = maxRowCount! * crossAxisCount;
159164 }
160165 // Internal children builder delegate.
161166 SliverChildDelegate childrenDelegate = SliverChildBuilderDelegate (
@@ -181,6 +186,8 @@ class ResponsiveGridView extends StatelessWidget {
181186 semanticChildCount: semanticChildCount,
182187 dragStartBehavior: dragStartBehavior,
183188 keyboardDismissBehavior: keyboardDismissBehavior,
189+ clipBehavior: clipBehavior,
190+ restorationId: restorationId,
184191 ),
185192 );
186193 });
@@ -191,27 +198,28 @@ class ResponsiveGridView extends StatelessWidget {
191198class _ResponsiveGridViewLayout extends BoxScrollView {
192199 final ResponsiveGridDelegate gridDelegate;
193200 final SliverChildDelegate childrenDelegate;
194- final int itemCount;
201+ final int ? itemCount;
195202
196203 _ResponsiveGridViewLayout ({
197- Key key,
204+ Key ? key,
198205 Axis scrollDirection = Axis .vertical,
199206 bool reverse = false ,
200- ScrollController controller,
201- bool primary,
202- ScrollPhysics physics,
207+ ScrollController ? controller,
208+ bool ? primary,
209+ ScrollPhysics ? physics,
203210 bool shrinkWrap = false ,
204- EdgeInsetsGeometry padding,
205- @ required this .gridDelegate,
206- @ required this .childrenDelegate,
211+ EdgeInsetsGeometry ? padding,
212+ required this .gridDelegate,
213+ required this .childrenDelegate,
207214 this .itemCount,
208- double cacheExtent,
209- int semanticChildCount,
215+ double ? cacheExtent,
216+ int ? semanticChildCount,
210217 DragStartBehavior dragStartBehavior = DragStartBehavior .start,
211218 ScrollViewKeyboardDismissBehavior keyboardDismissBehavior =
212219 ScrollViewKeyboardDismissBehavior .manual,
213- }) : assert (gridDelegate != null ),
214- super (
220+ String ? restorationId,
221+ Clip clipBehavior = Clip .hardEdge,
222+ }) : super (
215223 key: key,
216224 scrollDirection: scrollDirection,
217225 reverse: reverse,
@@ -224,6 +232,8 @@ class _ResponsiveGridViewLayout extends BoxScrollView {
224232 semanticChildCount: semanticChildCount ?? itemCount,
225233 dragStartBehavior: dragStartBehavior,
226234 keyboardDismissBehavior: keyboardDismissBehavior,
235+ restorationId: restorationId,
236+ clipBehavior: clipBehavior,
227237 );
228238
229239 @override
@@ -254,18 +264,18 @@ class ResponsiveGridDelegate extends SliverGridDelegate {
254264 (maxCrossAxisExtent != null && maxCrossAxisExtent >= 0 ) ||
255265 (minCrossAxisExtent != null && minCrossAxisExtent >= 0 ),
256266 'Must provide a valid cross axis extent.' ),
257- assert (mainAxisSpacing != null && mainAxisSpacing >= 0 ),
258- assert (crossAxisSpacing != null && crossAxisSpacing >= 0 ),
259- assert (childAspectRatio != null && childAspectRatio > 0 );
267+ assert (mainAxisSpacing >= 0 ),
268+ assert (crossAxisSpacing >= 0 ),
269+ assert (childAspectRatio > 0 );
260270
261271 /// Fixed item size.
262- final double crossAxisExtent;
272+ final double ? crossAxisExtent;
263273
264274 /// Maximum item size.
265- final double maxCrossAxisExtent;
275+ final double ? maxCrossAxisExtent;
266276
267277 /// Minimum item size.
268- final double minCrossAxisExtent;
278+ final double ? minCrossAxisExtent;
269279 final double mainAxisSpacing;
270280 final double crossAxisSpacing;
271281 final double childAspectRatio;
@@ -290,19 +300,19 @@ class ResponsiveGridDelegate extends SliverGridDelegate {
290300 // Item height.
291301 double childMainAxisExtent;
292302 // Item width.
293- double childCrossAxisExtent;
303+ double ? childCrossAxisExtent;
294304 // Switch between item sizing behaviors.
295305 if (this .crossAxisExtent != null ) {
296306 crossAxisCount =
297- (constraints.crossAxisExtent / (crossAxisExtent + crossAxisSpacing))
307+ (constraints.crossAxisExtent / (crossAxisExtent! + crossAxisSpacing))
298308 .floor ();
299309 childCrossAxisExtent = crossAxisExtent;
300- childMainAxisExtent = childCrossAxisExtent / childAspectRatio;
310+ childMainAxisExtent = childCrossAxisExtent! / childAspectRatio;
301311 mainAxisStride = childMainAxisExtent + mainAxisSpacing;
302312 crossAxisStride = childCrossAxisExtent + crossAxisSpacing;
303313 } else if (this .maxCrossAxisExtent != null ) {
304314 crossAxisCount = (constraints.crossAxisExtent /
305- (maxCrossAxisExtent + crossAxisSpacing))
315+ (maxCrossAxisExtent! + crossAxisSpacing))
306316 .ceil ();
307317 final double usableCrossAxisExtent =
308318 constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1 );
@@ -312,7 +322,7 @@ class ResponsiveGridDelegate extends SliverGridDelegate {
312322 crossAxisStride = childCrossAxisExtent + crossAxisSpacing;
313323 } else {
314324 crossAxisCount = (constraints.crossAxisExtent /
315- (minCrossAxisExtent + crossAxisSpacing))
325+ (minCrossAxisExtent! + crossAxisSpacing))
316326 .floor ();
317327 final double usableCrossAxisExtent =
318328 constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1 );
0 commit comments