Skip to content

Commit

Permalink
Add tests and fixes #17 (rtl support)
Browse files Browse the repository at this point in the history
  • Loading branch information
letsar committed Oct 21, 2018
1 parent b81bf3f commit 1f53238
Show file tree
Hide file tree
Showing 5 changed files with 159 additions and 32 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.2.3
### Fixed
* Fix the rtl support (https://github.com/letsar/flutter_staggered_grid_view/issues/17).

## 0.2.2
* Add Dart 2 support.

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ In the `pubspec.yaml` of your flutter project, add the following dependency:
```yaml
dependencies:
...
flutter_staggered_grid_view: "^0.2.2"
flutter_staggered_grid_view: "^0.2.3"
```

In your library add the following import:
Expand Down
2 changes: 1 addition & 1 deletion lib/src/rendering/sliver_staggered_grid.dart
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@ class RenderSliverStaggeredGrid extends RenderSliverVariableSizeBoxAdaptor {
crossAxisExtent: configuration.cellStride * tile.crossAxisCellCount -
configuration.crossAxisSpacing,
crossAxisCellCount: tile.crossAxisCellCount,
blockIndex: blockIndex,
blockIndex: block.index,
);
return geometry;
}
Expand Down
4 changes: 2 additions & 2 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
name: flutter_staggered_grid_view
description: A Flutter staggered grid view
version: 0.2.2
version: 0.2.3
author: Romain Rastel <lets4r@gmail.com>
homepage: https://github.com/letsar/flutter_staggered_grid_view
dependencies:
flutter:
sdk: flutter

dev_dependencies:
test: ^0.12.0
test: ^1.3.0
flutter_test:
sdk: flutter

Expand Down
179 changes: 151 additions & 28 deletions test/flutter_staggered_grid_view_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,25 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';

Size _getTileSize(StaggeredTile tile, double cellLength) {
return new Size(tile.crossAxisCellCount * cellLength,
return Size(tile.crossAxisCellCount * cellLength,
tile.mainAxisExtent ?? tile.mainAxisCellCount * cellLength);
}

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

final List<int> log = <int>[];
final widgets = new List<Widget>.generate(20, (int i) {
return new Builder(
final widgets = List<Widget>.generate(20, (int i) {
return Builder(
builder: (BuildContext context) {
log.add(i);
return new Container(
child: new Text('$i'),
return Container(
child: Text('$i'),
);
},
);
Expand Down Expand Up @@ -51,9 +51,9 @@ void main() {
const StaggeredTile.count(1, 1),
];

await tester.pumpWidget(new Directionality(
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
child: new StaggeredGridView.count(
child: StaggeredGridView.count(
crossAxisSpacing: 0.0,
mainAxisSpacing: 0.0,
crossAxisCount: crossAxisCount,
Expand Down Expand Up @@ -85,11 +85,130 @@ void main() {
const Offset(3.0, 9.0),
];

for (int i = 0; i < 5; i++) {
expect(tester.getTopLeft(find.text('$i')),
equals(expectedTopLeftNormalizedOffsets[i] * cellLength));
expect(tester.getSize(find.text('$i')),
equals(_getTileSize(tiles[i], cellLength)));
}

expect(
log,
equals(<int>[
0,
1,
2,
3,
4,
5,
]));
log.clear();

final ScrollableState scrollableState =
tester.state(find.byType(Scrollable));
final ScrollPosition scrollPosition = scrollableState.position;
scrollPosition.jumpTo(1000.0);

expect(log, isEmpty);
await tester.pump();

for (var item in log) {
expect(tester.getTopLeft(find.text('$item')),
equals(expectedTopLeftNormalizedOffsets[item] * cellLength));
expect(tester.getSize(find.text('$item')),
equals(_getTileSize(tiles[item], cellLength)));
var finder = find.text('$item');
if (finder.evaluate().isNotEmpty) {
expect(
tester.getTopLeft(find.text('$item')),
equals(expectedTopLeftNormalizedOffsets[item] * cellLength -
const Offset(0.0, 1000.0)));
expect(tester.getSize(find.text('$item')),
equals(_getTileSize(tiles[item], cellLength)));
}
}

expect(
log, equals(<int>[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]));
log.clear();
});

testWidgets('StaggeredGridView - tile layout and scroll - rtl',
(WidgetTester tester) async {
/// Screen size: 800x600 by default.
const Size screenSize = const Size(800.0, 600.0);
const int crossAxisCount = 4;
double cellLength = screenSize.width / crossAxisCount;

final List<int> log = <int>[];
final widgets = List<Widget>.generate(20, (int i) {
return Builder(
builder: (BuildContext context) {
log.add(i);
return Container(
child: Text('$i'),
);
},
);
});
final tiles = const <StaggeredTile>[
const StaggeredTile.count(2, 2),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 2),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(4, 1),
const StaggeredTile.count(4, 2),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 4),
const StaggeredTile.count(1, 3),
const StaggeredTile.count(1, 2),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 1),
const StaggeredTile.count(1, 1),
];

await tester.pumpWidget(Directionality(
textDirection: TextDirection.rtl,
child: StaggeredGridView.count(
crossAxisSpacing: 0.0,
mainAxisSpacing: 0.0,
crossAxisCount: crossAxisCount,
staggeredTiles: tiles,
children: widgets,
),
));

List<Offset> expectedTopRightNormalizedOffsets = const <Offset>[
const Offset(4.0, 0.0),
const Offset(2.0, 0.0),
const Offset(1.0, 0.0),
const Offset(2.0, 1.0),
const Offset(4.0, 2.0),
const Offset(4.0, 3.0),
const Offset(4.0, 5.0),
const Offset(3.0, 5.0),
const Offset(2.0, 5.0),
const Offset(1.0, 5.0),
const Offset(4.0, 6.0),
const Offset(3.0, 6.0),
const Offset(2.0, 6.0),
const Offset(1.0, 6.0),
const Offset(1.0, 7.0),
const Offset(2.0, 8.0),
const Offset(1.0, 8.0),
const Offset(3.0, 9.0),
const Offset(2.0, 9.0),
const Offset(1.0, 9.0),
];

for (int i = 0; i < 5; i++) {
expect(tester.getTopRight(find.text('$i')),
equals(expectedTopRightNormalizedOffsets[i] * cellLength));
expect(tester.getSize(find.text('$i')),
equals(_getTileSize(tiles[i], cellLength)));
}

expect(
Expand All @@ -113,27 +232,31 @@ void main() {
await tester.pump();

for (var item in log) {
expect(
tester.getTopLeft(find.text('$item')),
equals(expectedTopLeftNormalizedOffsets[item] * cellLength -
const Offset(0.0, 1000.0)));
expect(tester.getSize(find.text('$item')),
equals(_getTileSize(tiles[item], cellLength)));
var finder = find.text('$item');
if (finder.evaluate().isNotEmpty) {
expect(
tester.getTopRight(find.text('$item')),
equals(expectedTopRightNormalizedOffsets[item] * cellLength -
const Offset(0.0, 1000.0)));
expect(tester.getSize(find.text('$item')),
equals(_getTileSize(tiles[item], cellLength)));
}
}

expect(log, equals(<int>[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]));
expect(
log, equals(<int>[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]));
log.clear();
});

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

final widgets = new List<Widget>.generate(4, (int i) {
return new Builder(
final widgets = List<Widget>.generate(4, (int i) {
return Builder(
builder: (BuildContext context) {
log.add(i);
return new Container(
child: new Text('$i'),
return Container(
child: Text('$i'),
);
},
);
Expand All @@ -146,9 +269,9 @@ void main() {
const StaggeredTile.count(1, 1),
];

await tester.pumpWidget(new Directionality(
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
child: new StaggeredGridView.extent(
child: StaggeredGridView.extent(
crossAxisSpacing: 0.0,
mainAxisSpacing: 0.0,
maxCrossAxisExtent: 200.0,
Expand Down Expand Up @@ -181,11 +304,11 @@ void main() {
// Simulate a screen rotation.
Size initialSize = tester.binding.renderView.configuration.size;
tester.binding.renderView.configuration =
new TestViewConfiguration(size: initialSize.flipped);
TestViewConfiguration(size: initialSize.flipped);

await tester.pumpWidget(new Directionality(
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
child: new StaggeredGridView.extent(
child: StaggeredGridView.extent(
crossAxisSpacing: 0.0,
mainAxisSpacing: 0.0,
maxCrossAxisExtent: 200.0,
Expand Down

0 comments on commit 1f53238

Please sign in to comment.