@@ -4,7 +4,6 @@ import 'package:codelessly_json_annotation/codelessly_json_annotation.dart';
44import 'package:equatable/equatable.dart' ;
55
66import '../../../codelessly_api.dart' ;
7- import '../models/grid_delegate_type.dart' ;
87
98part '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