From 307848953f5d8aad0fee167d8564bac61b294104 Mon Sep 17 00:00:00 2001 From: Ali EP Date: Thu, 21 Feb 2019 03:13:01 +0330 Subject: [PATCH] Fixes crossAxisSpacing overflow in RTL (#27945) --- .../lib/src/rendering/sliver_grid.dart | 2 +- .../flutter/test/widgets/grid_view_test.dart | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/rendering/sliver_grid.dart b/packages/flutter/lib/src/rendering/sliver_grid.dart index ce478071269..3d23d565e85 100644 --- a/packages/flutter/lib/src/rendering/sliver_grid.dart +++ b/packages/flutter/lib/src/rendering/sliver_grid.dart @@ -207,7 +207,7 @@ class SliverGridRegularTileLayout extends SliverGridLayout { double _getOffsetFromStartInCrossAxis(double crossAxisStart) { if (reverseCrossAxis) - return crossAxisCount * crossAxisStride - crossAxisStart - childCrossAxisExtent; + return crossAxisCount * crossAxisStride - crossAxisStart - childCrossAxisExtent - (crossAxisStride - childCrossAxisExtent); return crossAxisStart; } diff --git a/packages/flutter/test/widgets/grid_view_test.dart b/packages/flutter/test/widgets/grid_view_test.dart index 3938ac14d48..5f4ab097505 100644 --- a/packages/flutter/test/widgets/grid_view_test.dart +++ b/packages/flutter/test/widgets/grid_view_test.dart @@ -536,4 +536,32 @@ void main() { expect(tester.getTopLeft(find.byKey(target)), const Offset(600.0, 0.0)); expect(tester.getBottomRight(find.byKey(target)), const Offset(800.0, 200.0)); }); + + testWidgets('GridView crossAxisSpacing', (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/27151. + final Key target = UniqueKey(); + + Widget build(TextDirection textDirection) { + return Directionality( + textDirection: textDirection, + child: GridView.count( + crossAxisCount: 4, + crossAxisSpacing: 8.0, + children: [ + Container(key: target), + ], + ), + ); + } + + await tester.pumpWidget(build(TextDirection.ltr)); + + expect(tester.getTopLeft(find.byKey(target)), Offset.zero); + expect(tester.getBottomRight(find.byKey(target)), const Offset(194.0, 194.0)); + + await tester.pumpWidget(build(TextDirection.rtl)); + + expect(tester.getTopLeft(find.byKey(target)), const Offset(606.0, 0.0)); + expect(tester.getBottomRight(find.byKey(target)), const Offset(800.0, 194.0)); + }); }