Skip to content

Commit 1f53238

Browse files
committed
Add tests and fixes #17 (rtl support)
1 parent b81bf3f commit 1f53238

File tree

5 files changed

+159
-32
lines changed

5 files changed

+159
-32
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.2.3
2+
### Fixed
3+
* Fix the rtl support (https://github.com/letsar/flutter_staggered_grid_view/issues/17).
4+
15
## 0.2.2
26
* Add Dart 2 support.
37

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ In the `pubspec.yaml` of your flutter project, add the following dependency:
2828
```yaml
2929
dependencies:
3030
...
31-
flutter_staggered_grid_view: "^0.2.2"
31+
flutter_staggered_grid_view: "^0.2.3"
3232
```
3333
3434
In your library add the following import:

lib/src/rendering/sliver_staggered_grid.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ class RenderSliverStaggeredGrid extends RenderSliverVariableSizeBoxAdaptor {
443443
crossAxisExtent: configuration.cellStride * tile.crossAxisCellCount -
444444
configuration.crossAxisSpacing,
445445
crossAxisCellCount: tile.crossAxisCellCount,
446-
blockIndex: blockIndex,
446+
blockIndex: block.index,
447447
);
448448
return geometry;
449449
}

pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
name: flutter_staggered_grid_view
22
description: A Flutter staggered grid view
3-
version: 0.2.2
3+
version: 0.2.3
44
author: Romain Rastel <[email protected]>
55
homepage: https://github.com/letsar/flutter_staggered_grid_view
66
dependencies:
77
flutter:
88
sdk: flutter
99

1010
dev_dependencies:
11-
test: ^0.12.0
11+
test: ^1.3.0
1212
flutter_test:
1313
sdk: flutter
1414

test/flutter_staggered_grid_view_test.dart

Lines changed: 151 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,25 @@ import 'package:flutter_test/flutter_test.dart';
55
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
66

77
Size _getTileSize(StaggeredTile tile, double cellLength) {
8-
return new Size(tile.crossAxisCellCount * cellLength,
8+
return Size(tile.crossAxisCellCount * cellLength,
99
tile.mainAxisExtent ?? tile.mainAxisCellCount * cellLength);
1010
}
1111

1212
void main() {
13-
testWidgets('StaggeredGridView - tile layout and scroll',
13+
testWidgets('StaggeredGridView - tile layout and scroll - ltr',
1414
(WidgetTester tester) async {
1515
/// Screen size: 800x600 by default.
1616
const Size screenSize = const Size(800.0, 600.0);
1717
const int crossAxisCount = 4;
1818
double cellLength = screenSize.width / crossAxisCount;
1919

2020
final List<int> log = <int>[];
21-
final widgets = new List<Widget>.generate(20, (int i) {
22-
return new Builder(
21+
final widgets = List<Widget>.generate(20, (int i) {
22+
return Builder(
2323
builder: (BuildContext context) {
2424
log.add(i);
25-
return new Container(
26-
child: new Text('$i'),
25+
return Container(
26+
child: Text('$i'),
2727
);
2828
},
2929
);
@@ -51,9 +51,9 @@ void main() {
5151
const StaggeredTile.count(1, 1),
5252
];
5353

54-
await tester.pumpWidget(new Directionality(
54+
await tester.pumpWidget(Directionality(
5555
textDirection: TextDirection.ltr,
56-
child: new StaggeredGridView.count(
56+
child: StaggeredGridView.count(
5757
crossAxisSpacing: 0.0,
5858
mainAxisSpacing: 0.0,
5959
crossAxisCount: crossAxisCount,
@@ -85,11 +85,130 @@ void main() {
8585
const Offset(3.0, 9.0),
8686
];
8787

88+
for (int i = 0; i < 5; i++) {
89+
expect(tester.getTopLeft(find.text('$i')),
90+
equals(expectedTopLeftNormalizedOffsets[i] * cellLength));
91+
expect(tester.getSize(find.text('$i')),
92+
equals(_getTileSize(tiles[i], cellLength)));
93+
}
94+
95+
expect(
96+
log,
97+
equals(<int>[
98+
0,
99+
1,
100+
2,
101+
3,
102+
4,
103+
5,
104+
]));
105+
log.clear();
106+
107+
final ScrollableState scrollableState =
108+
tester.state(find.byType(Scrollable));
109+
final ScrollPosition scrollPosition = scrollableState.position;
110+
scrollPosition.jumpTo(1000.0);
111+
112+
expect(log, isEmpty);
113+
await tester.pump();
114+
88115
for (var item in log) {
89-
expect(tester.getTopLeft(find.text('$item')),
90-
equals(expectedTopLeftNormalizedOffsets[item] * cellLength));
91-
expect(tester.getSize(find.text('$item')),
92-
equals(_getTileSize(tiles[item], cellLength)));
116+
var finder = find.text('$item');
117+
if (finder.evaluate().isNotEmpty) {
118+
expect(
119+
tester.getTopLeft(find.text('$item')),
120+
equals(expectedTopLeftNormalizedOffsets[item] * cellLength -
121+
const Offset(0.0, 1000.0)));
122+
expect(tester.getSize(find.text('$item')),
123+
equals(_getTileSize(tiles[item], cellLength)));
124+
}
125+
}
126+
127+
expect(
128+
log, equals(<int>[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]));
129+
log.clear();
130+
});
131+
132+
testWidgets('StaggeredGridView - tile layout and scroll - rtl',
133+
(WidgetTester tester) async {
134+
/// Screen size: 800x600 by default.
135+
const Size screenSize = const Size(800.0, 600.0);
136+
const int crossAxisCount = 4;
137+
double cellLength = screenSize.width / crossAxisCount;
138+
139+
final List<int> log = <int>[];
140+
final widgets = List<Widget>.generate(20, (int i) {
141+
return Builder(
142+
builder: (BuildContext context) {
143+
log.add(i);
144+
return Container(
145+
child: Text('$i'),
146+
);
147+
},
148+
);
149+
});
150+
final tiles = const <StaggeredTile>[
151+
const StaggeredTile.count(2, 2),
152+
const StaggeredTile.count(1, 1),
153+
const StaggeredTile.count(1, 2),
154+
const StaggeredTile.count(1, 1),
155+
const StaggeredTile.count(4, 1),
156+
const StaggeredTile.count(4, 2),
157+
const StaggeredTile.count(1, 1),
158+
const StaggeredTile.count(1, 1),
159+
const StaggeredTile.count(1, 1),
160+
const StaggeredTile.count(1, 1),
161+
const StaggeredTile.count(1, 4),
162+
const StaggeredTile.count(1, 3),
163+
const StaggeredTile.count(1, 2),
164+
const StaggeredTile.count(1, 1),
165+
const StaggeredTile.count(1, 1),
166+
const StaggeredTile.count(1, 1),
167+
const StaggeredTile.count(1, 1),
168+
const StaggeredTile.count(1, 1),
169+
const StaggeredTile.count(1, 1),
170+
const StaggeredTile.count(1, 1),
171+
];
172+
173+
await tester.pumpWidget(Directionality(
174+
textDirection: TextDirection.rtl,
175+
child: StaggeredGridView.count(
176+
crossAxisSpacing: 0.0,
177+
mainAxisSpacing: 0.0,
178+
crossAxisCount: crossAxisCount,
179+
staggeredTiles: tiles,
180+
children: widgets,
181+
),
182+
));
183+
184+
List<Offset> expectedTopRightNormalizedOffsets = const <Offset>[
185+
const Offset(4.0, 0.0),
186+
const Offset(2.0, 0.0),
187+
const Offset(1.0, 0.0),
188+
const Offset(2.0, 1.0),
189+
const Offset(4.0, 2.0),
190+
const Offset(4.0, 3.0),
191+
const Offset(4.0, 5.0),
192+
const Offset(3.0, 5.0),
193+
const Offset(2.0, 5.0),
194+
const Offset(1.0, 5.0),
195+
const Offset(4.0, 6.0),
196+
const Offset(3.0, 6.0),
197+
const Offset(2.0, 6.0),
198+
const Offset(1.0, 6.0),
199+
const Offset(1.0, 7.0),
200+
const Offset(2.0, 8.0),
201+
const Offset(1.0, 8.0),
202+
const Offset(3.0, 9.0),
203+
const Offset(2.0, 9.0),
204+
const Offset(1.0, 9.0),
205+
];
206+
207+
for (int i = 0; i < 5; i++) {
208+
expect(tester.getTopRight(find.text('$i')),
209+
equals(expectedTopRightNormalizedOffsets[i] * cellLength));
210+
expect(tester.getSize(find.text('$i')),
211+
equals(_getTileSize(tiles[i], cellLength)));
93212
}
94213

95214
expect(
@@ -113,27 +232,31 @@ void main() {
113232
await tester.pump();
114233

115234
for (var item in log) {
116-
expect(
117-
tester.getTopLeft(find.text('$item')),
118-
equals(expectedTopLeftNormalizedOffsets[item] * cellLength -
119-
const Offset(0.0, 1000.0)));
120-
expect(tester.getSize(find.text('$item')),
121-
equals(_getTileSize(tiles[item], cellLength)));
235+
var finder = find.text('$item');
236+
if (finder.evaluate().isNotEmpty) {
237+
expect(
238+
tester.getTopRight(find.text('$item')),
239+
equals(expectedTopRightNormalizedOffsets[item] * cellLength -
240+
const Offset(0.0, 1000.0)));
241+
expect(tester.getSize(find.text('$item')),
242+
equals(_getTileSize(tiles[item], cellLength)));
243+
}
122244
}
123245

124-
expect(log, equals(<int>[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]));
246+
expect(
247+
log, equals(<int>[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]));
125248
log.clear();
126249
});
127250

128251
testWidgets('StaggeredGridView.extent - rotate', (WidgetTester tester) async {
129252
final List<int> log = <int>[];
130253

131-
final widgets = new List<Widget>.generate(4, (int i) {
132-
return new Builder(
254+
final widgets = List<Widget>.generate(4, (int i) {
255+
return Builder(
133256
builder: (BuildContext context) {
134257
log.add(i);
135-
return new Container(
136-
child: new Text('$i'),
258+
return Container(
259+
child: Text('$i'),
137260
);
138261
},
139262
);
@@ -146,9 +269,9 @@ void main() {
146269
const StaggeredTile.count(1, 1),
147270
];
148271

149-
await tester.pumpWidget(new Directionality(
272+
await tester.pumpWidget(Directionality(
150273
textDirection: TextDirection.ltr,
151-
child: new StaggeredGridView.extent(
274+
child: StaggeredGridView.extent(
152275
crossAxisSpacing: 0.0,
153276
mainAxisSpacing: 0.0,
154277
maxCrossAxisExtent: 200.0,
@@ -181,11 +304,11 @@ void main() {
181304
// Simulate a screen rotation.
182305
Size initialSize = tester.binding.renderView.configuration.size;
183306
tester.binding.renderView.configuration =
184-
new TestViewConfiguration(size: initialSize.flipped);
307+
TestViewConfiguration(size: initialSize.flipped);
185308

186-
await tester.pumpWidget(new Directionality(
309+
await tester.pumpWidget(Directionality(
187310
textDirection: TextDirection.ltr,
188-
child: new StaggeredGridView.extent(
311+
child: StaggeredGridView.extent(
189312
crossAxisSpacing: 0.0,
190313
mainAxisSpacing: 0.0,
191314
maxCrossAxisExtent: 200.0,

0 commit comments

Comments
 (0)