Skip to content

Commit 14f2dbb

Browse files
SaadArdatiBirjuVachhani
authored andcommitted
Grid View #8
1 parent 83835b8 commit 14f2dbb

File tree

1 file changed

+37
-14
lines changed

1 file changed

+37
-14
lines changed

lib/src/api/nodes/grid_view_node.dart

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'package:codelessly_json_annotation/codelessly_json_annotation.dart';
44
import 'package:equatable/equatable.dart';
55

66
import '../../../codelessly_api.dart';
7-
import '../models/grid_delegate_type.dart';
87

98
part 'grid_view_node.g.dart';
109

@@ -83,24 +82,36 @@ class GridViewNode extends SinglePlaceholderNode
8382
);
8483
}
8584

86-
@override
87-
BoxConstraintsModel? relegatedConstraintsToChildren(BaseNode child) {
85+
/// Calculates the fixed main axis extent of any child in the grid.
86+
double calculateMainAxisExtent(
87+
AxisC axis,
88+
SizeC size, [
89+
double? crossAxisExtent,
90+
]) {
91+
final childCrossAxisExtent = crossAxisExtent ??
92+
calculateCrossAxisExtent(
93+
scrollDirection,
94+
innerBoxLocal.size,
95+
);
96+
97+
return properties.gridDelegate.mainAxisExtent ??
98+
childCrossAxisExtent / properties.gridDelegate.childAspectRatio;
99+
}
100+
101+
/// Calculates the fixed cross axis extent of any child in the grid.
102+
double calculateCrossAxisExtent(AxisC axis, SizeC size) {
88103
// Total cross axis space available for the grid view.
89-
final totalCrossAxisSize = scrollDirection.isVertical
90-
? innerBoxLocal.size.width
91-
: innerBoxLocal.size.height;
104+
final double totalCrossAxisSize =
105+
axis.opposite.isHorizontal ? size.width : size.height;
92106

93-
double childMainAxisExtent, childCrossAxisExtent;
94107
switch (properties.gridDelegate) {
95108
case FixedCrossAxisCountGridDelegateProperties prop:
96109
final double usableCrossAxisExtent = max(
97110
0.0,
98111
totalCrossAxisSize -
99112
prop.crossAxisSpacing * (prop.crossAxisCount - 1),
100113
);
101-
childCrossAxisExtent = usableCrossAxisExtent / prop.crossAxisCount;
102-
childMainAxisExtent =
103-
prop.mainAxisExtent ?? childCrossAxisExtent / prop.childAspectRatio;
114+
return usableCrossAxisExtent / prop.crossAxisCount;
104115
case MaxCrossAxisExtentGridDelegateProperties prop:
105116
int crossAxisCount = (totalCrossAxisSize /
106117
(prop.maxCrossAxisExtent + prop.crossAxisSpacing))
@@ -111,10 +122,21 @@ class GridViewNode extends SinglePlaceholderNode
111122
0.0,
112123
totalCrossAxisSize - prop.crossAxisSpacing * (crossAxisCount - 1),
113124
);
114-
childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
115-
childMainAxisExtent =
116-
prop.mainAxisExtent ?? childCrossAxisExtent / prop.childAspectRatio;
125+
return usableCrossAxisExtent / crossAxisCount;
117126
}
127+
}
128+
129+
@override
130+
BoxConstraintsModel? relegatedConstraintsToChildren(BaseNode child) {
131+
final double childCrossAxisExtent = calculateCrossAxisExtent(
132+
scrollDirection,
133+
innerBoxLocal.size,
134+
);
135+
final double childMainAxisExtent = calculateMainAxisExtent(
136+
scrollDirection,
137+
innerBoxLocal.size,
138+
childCrossAxisExtent,
139+
);
118140

119141
return switch (scrollDirection) {
120142
AxisC.horizontal => BoxConstraintsModel(
@@ -226,7 +248,8 @@ sealed class GridDelegateProperties with EquatableMixin, SerializableMixin {
226248
final double? mainAxisExtent;
227249

228250
/// Creates a new [GridDelegateProperties] instance.
229-
const GridDelegateProperties(this.type, {
251+
const GridDelegateProperties(
252+
this.type, {
230253
this.mainAxisSpacing = 0,
231254
this.crossAxisSpacing = 0,
232255
this.childAspectRatio = 1,

0 commit comments

Comments
 (0)