Skip to content

Commit ec4279e

Browse files
Merge pull request #45 from Codelessly/nullsafety
Null Safety Migration
2 parents a723d4a + 931556d commit ec4279e

File tree

9 files changed

+268
-261
lines changed

9 files changed

+268
-261
lines changed

lib/responsive_grid.dart

Lines changed: 52 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,32 @@ import 'package:flutter/widgets.dart';
1515
class 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 {
191198
class _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);

lib/responsive_row_column.dart

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,26 @@ class ResponsiveRowColumn extends StatelessWidget {
2323
final MainAxisAlignment rowMainAxisAlignment;
2424
final MainAxisSize rowMainAxisSize;
2525
final CrossAxisAlignment rowCrossAxisAlignment;
26-
final TextDirection rowTextDirection;
26+
final TextDirection? rowTextDirection;
2727
final VerticalDirection rowVerticalDirection;
28-
final TextBaseline rowTextBaseline;
28+
final TextBaseline? rowTextBaseline;
2929
final MainAxisAlignment columnMainAxisAlignment;
3030
final MainAxisSize columnMainAxisSize;
3131
final CrossAxisAlignment columnCrossAxisAlignment;
32-
final TextDirection columnTextDirection;
32+
final TextDirection? columnTextDirection;
3333
final VerticalDirection columnVerticalDirection;
34-
final TextBaseline columnTextBaseline;
35-
final double rowSpacing;
36-
final double columnSpacing;
34+
final TextBaseline? columnTextBaseline;
35+
final double? rowSpacing;
36+
final double? columnSpacing;
3737
final EdgeInsets rowPadding;
3838
final EdgeInsets columnPadding;
3939
get isRow => rowColumn;
4040
get isColumn => !rowColumn;
4141

4242
const ResponsiveRowColumn(
43-
{Key key,
43+
{Key? key,
4444
this.children = const [],
45-
@required this.rowColumn,
45+
required this.rowColumn,
4646
this.rowMainAxisAlignment = MainAxisAlignment.start,
4747
this.rowMainAxisSize = MainAxisSize.max,
4848
this.rowCrossAxisAlignment = CrossAxisAlignment.center,
@@ -96,7 +96,7 @@ class ResponsiveRowColumn extends StatelessWidget {
9696

9797
/// Logic to construct widget [children].
9898
List<Widget> buildChildren(
99-
List<ResponsiveRowColumnItem> children, bool rowColumn, double spacing) {
99+
List<ResponsiveRowColumnItem> children, bool rowColumn, double? spacing) {
100100
// Sort ResponsiveRowColumnItems by their order.
101101
List<ResponsiveRowColumnItem> childrenHolder = children;
102102
childrenHolder.sort((a, b) {
@@ -135,14 +135,14 @@ class ResponsiveRowColumnItem extends StatelessWidget {
135135
final int rowOrder;
136136
final int columnOrder;
137137
final bool rowColumn;
138-
final int rowFlex;
139-
final int columnFlex;
140-
final FlexFit rowFit;
141-
final FlexFit columnFit;
138+
final int? rowFlex;
139+
final int? columnFlex;
140+
final FlexFit? rowFit;
141+
final FlexFit? columnFit;
142142

143143
const ResponsiveRowColumnItem(
144-
{Key key,
145-
@required this.child,
144+
{Key? key,
145+
required this.child,
146146
this.rowOrder = 1073741823,
147147
this.columnOrder = 1073741823,
148148
this.rowColumn = true,
@@ -166,14 +166,14 @@ class ResponsiveRowColumnItem extends StatelessWidget {
166166
}
167167

168168
ResponsiveRowColumnItem copyWith({
169-
Widget child,
170-
int rowOrder,
171-
int columnOrder,
172-
bool rowColumn,
173-
int rowFlex,
174-
int columnFlex,
175-
FlexFit rowFlexFit,
176-
FlexFit columnFlexFit,
169+
Widget? child,
170+
int? rowOrder,
171+
int? columnOrder,
172+
bool? rowColumn,
173+
int? rowFlex,
174+
int? columnFlex,
175+
FlexFit? rowFlexFit,
176+
FlexFit? columnFlexFit,
177177
}) =>
178178
ResponsiveRowColumnItem(
179179
child: child ?? this.child,

0 commit comments

Comments
 (0)