Skip to content

Commit bf836ca

Browse files
committed
optimize grid barrier
1 parent 4d9c648 commit bf836ca

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

lib/src/constraint_layout.dart

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:collection';
22
import 'dart:convert';
3+
import 'dart:math';
34
import 'dart:ui' as ui;
45
import 'dart:ui';
56

@@ -128,10 +129,26 @@ List<Widget> constraintGrid({
128129
return margin;
129130
}
130131

131-
List<ConstraintId> childIds = [];
132+
List<ConstraintId> leftChildIds = [];
133+
List<ConstraintId> topChildIds = [];
134+
List<ConstraintId> rightChildIds = [];
135+
List<ConstraintId> bottomChildIds = [];
136+
int lastRowIndex = (itemCount / columnCount).ceil() - 1;
137+
int lastColumnIndex = min(columnCount - 1, itemCount - 1);
132138
for (int i = 0; i < itemCount; i++) {
133139
ConstraintId itemId = ConstraintId(id.id + '_grid_item_$i');
134-
childIds.add(itemId);
140+
if (i % columnCount == 0) {
141+
leftChildIds.add(itemId);
142+
}
143+
if (i < columnCount) {
144+
topChildIds.add(itemId);
145+
}
146+
if (i % columnCount == lastColumnIndex) {
147+
rightChildIds.add(itemId);
148+
}
149+
if (i ~/ columnCount == lastRowIndex) {
150+
bottomChildIds.add(itemId);
151+
}
135152
Widget widget = itemBuilder(i);
136153
Size? itemSize = itemSizeBuilder?.call(i);
137154
widgets.add(Constrained(
@@ -159,25 +176,25 @@ List<Widget> constraintGrid({
159176
Barrier leftBarrier = Barrier(
160177
id: ConstraintId(id.id + '_left_barrier'),
161178
direction: BarrierDirection.left,
162-
referencedIds: childIds,
179+
referencedIds: leftChildIds,
163180
);
164181

165182
Barrier topBarrier = Barrier(
166183
id: ConstraintId(id.id + '_top_barrier'),
167184
direction: BarrierDirection.top,
168-
referencedIds: childIds,
185+
referencedIds: topChildIds,
169186
);
170187

171188
Barrier rightBarrier = Barrier(
172189
id: ConstraintId(id.id + '_right_barrier'),
173190
direction: BarrierDirection.right,
174-
referencedIds: childIds,
191+
referencedIds: rightChildIds,
175192
);
176193

177194
Barrier bottomBarrier = Barrier(
178195
id: ConstraintId(id.id + '_bottom_barrier'),
179196
direction: BarrierDirection.bottom,
180-
referencedIds: childIds,
197+
referencedIds: bottomChildIds,
181198
);
182199

183200
widgets.add(leftBarrier);
@@ -196,7 +213,7 @@ List<Widget> constraintGrid({
196213
zIndex: -1,
197214
translate: translate,
198215
translateConstraint: translateConstraint,
199-
visibility: visibility,
216+
visibility: invisible,
200217
));
201218

202219
return widgets;

0 commit comments

Comments
 (0)