@@ -5,25 +5,25 @@ import 'package:flutter_test/flutter_test.dart';
55import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart' ;
66
77Size _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
1212void 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