diff --git a/packages/flutter/lib/src/rendering/sliver.dart b/packages/flutter/lib/src/rendering/sliver.dart index c85bc1f9927..d2f28b8b7e4 100644 --- a/packages/flutter/lib/src/rendering/sliver.dart +++ b/packages/flutter/lib/src/rendering/sliver.dart @@ -556,7 +556,9 @@ class SliverConstraints extends Constraints { assert(other.debugAssertIsValid()); return other.axisDirection == axisDirection && other.growthDirection == growthDirection + && other.userScrollDirection == userScrollDirection && other.scrollOffset == scrollOffset + && other.precedingScrollExtent == precedingScrollExtent && other.overlap == overlap && other.remainingPaintExtent == remainingPaintExtent && other.crossAxisExtent == crossAxisExtent @@ -570,7 +572,9 @@ class SliverConstraints extends Constraints { int get hashCode => Object.hash( axisDirection, growthDirection, + userScrollDirection, scrollOffset, + precedingScrollExtent, overlap, remainingPaintExtent, crossAxisExtent, @@ -587,6 +591,7 @@ class SliverConstraints extends Constraints { '$growthDirection', '$userScrollDirection', 'scrollOffset: ${scrollOffset.toStringAsFixed(1)}', + 'precedingScrollExtent: ${precedingScrollExtent.toStringAsFixed(1)}', 'remainingPaintExtent: ${remainingPaintExtent.toStringAsFixed(1)}', if (overlap != 0.0) 'overlap: ${overlap.toStringAsFixed(1)}', 'crossAxisExtent: ${crossAxisExtent.toStringAsFixed(1)}', diff --git a/packages/flutter/test/rendering/slivers_test.dart b/packages/flutter/test/rendering/slivers_test.dart index aa39323966a..e8d0968085b 100644 --- a/packages/flutter/test/rendering/slivers_test.dart +++ b/packages/flutter/test/rendering/slivers_test.dart @@ -90,10 +90,10 @@ void main() { ' │ │ parentData: paintOffset=Offset(0.0, 0.0) (can use size)\n' ' │ │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ │ 0.0, remainingPaintExtent: 600.0, crossAxisExtent: 800.0,\n' - ' │ │ crossAxisDirection: AxisDirection.right,\n' - ' │ │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 850.0,\n' - ' │ │ cacheOrigin: 0.0)\n' + ' │ │ 0.0, precedingScrollExtent: 0.0, remainingPaintExtent: 600.0,\n' + ' │ │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ │ remainingCacheExtent: 850.0, cacheOrigin: 0.0)\n' ' │ │ geometry: SliverGeometry(scrollExtent: 400.0, paintExtent: 400.0,\n' ' │ │ maxPaintExtent: 400.0, cacheExtent: 400.0)\n' ' │ │\n' @@ -106,10 +106,10 @@ void main() { ' │ │ parentData: paintOffset=Offset(0.0, 400.0) (can use size)\n' ' │ │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ │ 0.0, remainingPaintExtent: 200.0, crossAxisExtent: 800.0,\n' - ' │ │ crossAxisDirection: AxisDirection.right,\n' - ' │ │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 450.0,\n' - ' │ │ cacheOrigin: 0.0)\n' + ' │ │ 0.0, precedingScrollExtent: 400.0, remainingPaintExtent: 200.0,\n' + ' │ │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ │ remainingCacheExtent: 450.0, cacheOrigin: 0.0)\n' ' │ │ geometry: SliverGeometry(scrollExtent: 400.0, paintExtent: 200.0,\n' ' │ │ maxPaintExtent: 400.0, hasVisualOverflow: true, cacheExtent:\n' ' │ │ 400.0)\n' @@ -123,10 +123,10 @@ void main() { ' │ │ parentData: paintOffset=Offset(0.0, 800.0) (can use size)\n' ' │ │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ │ 0.0, remainingPaintExtent: 0.0, crossAxisExtent: 800.0,\n' - ' │ │ crossAxisDirection: AxisDirection.right,\n' - ' │ │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 50.0,\n' - ' │ │ cacheOrigin: 0.0)\n' + ' │ │ 0.0, precedingScrollExtent: 800.0, remainingPaintExtent: 0.0,\n' + ' │ │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ │ remainingCacheExtent: 50.0, cacheOrigin: 0.0)\n' ' │ │ geometry: SliverGeometry(scrollExtent: 400.0, hidden,\n' ' │ │ maxPaintExtent: 400.0, hasVisualOverflow: true, cacheExtent:\n' ' │ │ 50.0)\n' @@ -140,10 +140,10 @@ void main() { ' │ │ parentData: paintOffset=Offset(0.0, 1200.0) (can use size)\n' ' │ │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ │ 0.0, remainingPaintExtent: 0.0, crossAxisExtent: 800.0,\n' - ' │ │ crossAxisDirection: AxisDirection.right,\n' - ' │ │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 0.0,\n' - ' │ │ cacheOrigin: 0.0)\n' + ' │ │ 0.0, precedingScrollExtent: 1200.0, remainingPaintExtent: 0.0,\n' + ' │ │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ │ remainingCacheExtent: 0.0, cacheOrigin: 0.0)\n' ' │ │ geometry: SliverGeometry(scrollExtent: 400.0, hidden,\n' ' │ │ maxPaintExtent: 400.0, hasVisualOverflow: true)\n' ' │ │\n' @@ -156,10 +156,10 @@ void main() { ' │ parentData: paintOffset=Offset(0.0, 1600.0) (can use size)\n' ' │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ 0.0, remainingPaintExtent: 0.0, crossAxisExtent: 800.0,\n' - ' │ crossAxisDirection: AxisDirection.right,\n' - ' │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 0.0,\n' - ' │ cacheOrigin: 0.0)\n' + ' │ 0.0, precedingScrollExtent: 1600.0, remainingPaintExtent: 0.0,\n' + ' │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ remainingCacheExtent: 0.0, cacheOrigin: 0.0)\n' ' │ geometry: SliverGeometry(scrollExtent: 400.0, hidden,\n' ' │ maxPaintExtent: 400.0, hasVisualOverflow: true)\n' ' │\n' @@ -977,7 +977,7 @@ void main() { ' The "precedingScrollExtent" is NaN, expected greater than or equal to zero.\n' ' The constraints are not normalized.\n' 'The offending constraints were:\n' - ' SliverConstraints(AxisDirection.down, GrowthDirection.forward, ScrollDirection.idle, scrollOffset: NaN, remainingPaintExtent: NaN, overlap: NaN, crossAxisExtent: NaN, crossAxisDirection: AxisDirection.left, viewportMainAxisExtent: NaN, remainingCacheExtent: NaN, cacheOrigin: NaN)', + ' SliverConstraints(AxisDirection.down, GrowthDirection.forward, ScrollDirection.idle, scrollOffset: NaN, precedingScrollExtent: NaN, remainingPaintExtent: NaN, overlap: NaN, crossAxisExtent: NaN, crossAxisDirection: AxisDirection.left, viewportMainAxisExtent: NaN, remainingCacheExtent: NaN, cacheOrigin: NaN)', ); threw = true; } @@ -1013,7 +1013,7 @@ void main() { ' The "precedingScrollExtent" is negative.\n' ' The constraints are not normalized.\n' 'The offending constraints were:\n' - ' SliverConstraints(AxisDirection.down, GrowthDirection.forward, ScrollDirection.idle, scrollOffset: -1.0, remainingPaintExtent: -1.0, crossAxisExtent: 0.0, crossAxisDirection: AxisDirection.left, viewportMainAxisExtent: 0.0, remainingCacheExtent: -1.0, cacheOrigin: 1.0)', + ' SliverConstraints(AxisDirection.down, GrowthDirection.forward, ScrollDirection.idle, scrollOffset: -1.0, precedingScrollExtent: -1.0, remainingPaintExtent: -1.0, crossAxisExtent: 0.0, crossAxisDirection: AxisDirection.left, viewportMainAxisExtent: 0.0, remainingCacheExtent: -1.0, cacheOrigin: 1.0)', ); threw = true; } diff --git a/packages/flutter/test/widgets/keep_alive_test.dart b/packages/flutter/test/widgets/keep_alive_test.dart index 9f02368597f..2c5ec19b1ba 100644 --- a/packages/flutter/test/widgets/keep_alive_test.dart +++ b/packages/flutter/test/widgets/keep_alive_test.dart @@ -316,10 +316,10 @@ void main() { ' │ parentData: paintOffset=Offset(0.0, 0.0) (can use size)\n' ' │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ 0.0, remainingPaintExtent: 600.0, crossAxisExtent: 800.0,\n' - ' │ crossAxisDirection: AxisDirection.right,\n' - ' │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 850.0,\n' - ' │ cacheOrigin: 0.0)\n' + ' │ 0.0, precedingScrollExtent: 0.0, remainingPaintExtent: 600.0,\n' + ' │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ remainingCacheExtent: 850.0, cacheOrigin: 0.0)\n' ' │ geometry: SliverGeometry(scrollExtent: 40000.0, paintExtent:\n' ' │ 600.0, maxPaintExtent: 40000.0, hasVisualOverflow: true,\n' ' │ cacheExtent: 850.0)\n' @@ -330,10 +330,10 @@ void main() { ' │ parentData: paintOffset=Offset(0.0, 0.0) (can use size)\n' ' │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ 0.0, remainingPaintExtent: 600.0, crossAxisExtent: 800.0,\n' - ' │ crossAxisDirection: AxisDirection.right,\n' - ' │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 850.0,\n' - ' │ cacheOrigin: 0.0)\n' + ' │ 0.0, precedingScrollExtent: 0.0, remainingPaintExtent: 600.0,\n' + ' │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ remainingCacheExtent: 850.0, cacheOrigin: 0.0)\n' ' │ geometry: SliverGeometry(scrollExtent: 40000.0, paintExtent:\n' ' │ 600.0, maxPaintExtent: 40000.0, hasVisualOverflow: true,\n' ' │ cacheExtent: 850.0)\n' @@ -491,10 +491,10 @@ void main() { ' │ parentData: paintOffset=Offset(0.0, 0.0) (can use size)\n' ' │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ 2000.0, remainingPaintExtent: 600.0, crossAxisExtent: 800.0,\n' - ' │ crossAxisDirection: AxisDirection.right,\n' - ' │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 1100.0,\n' - ' │ cacheOrigin: -250.0)\n' + ' │ 2000.0, precedingScrollExtent: 0.0, remainingPaintExtent:\n' + ' │ 600.0, crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ remainingCacheExtent: 1100.0, cacheOrigin: -250.0)\n' ' │ geometry: SliverGeometry(scrollExtent: 40000.0, paintExtent:\n' ' │ 600.0, maxPaintExtent: 40000.0, hasVisualOverflow: true,\n' ' │ cacheExtent: 1100.0)\n' @@ -505,10 +505,10 @@ void main() { ' │ parentData: paintOffset=Offset(0.0, 0.0) (can use size)\n' ' │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ 2000.0, remainingPaintExtent: 600.0, crossAxisExtent: 800.0,\n' - ' │ crossAxisDirection: AxisDirection.right,\n' - ' │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 1100.0,\n' - ' │ cacheOrigin: -250.0)\n' + ' │ 2000.0, precedingScrollExtent: 0.0, remainingPaintExtent:\n' + ' │ 600.0, crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ remainingCacheExtent: 1100.0, cacheOrigin: -250.0)\n' ' │ geometry: SliverGeometry(scrollExtent: 40000.0, paintExtent:\n' ' │ 600.0, maxPaintExtent: 40000.0, hasVisualOverflow: true,\n' ' │ cacheExtent: 1100.0)\n' diff --git a/packages/flutter/test/widgets/list_view_viewporting_test.dart b/packages/flutter/test/widgets/list_view_viewporting_test.dart index d6c02fcc8aa..8136f823e2f 100644 --- a/packages/flutter/test/widgets/list_view_viewporting_test.dart +++ b/packages/flutter/test/widgets/list_view_viewporting_test.dart @@ -336,10 +336,10 @@ void main() { ' │ parentData: paintOffset=Offset(0.0, 0.0) (can use size)\n' ' │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ 0.0, remainingPaintExtent: 600.0, crossAxisExtent: 800.0,\n' - ' │ crossAxisDirection: AxisDirection.right,\n' - ' │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 850.0,\n' - ' │ cacheOrigin: 0.0)\n' + ' │ 0.0, precedingScrollExtent: 0.0, remainingPaintExtent: 600.0,\n' + ' │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ remainingCacheExtent: 850.0, cacheOrigin: 0.0)\n' ' │ geometry: SliverGeometry(scrollExtent: 300.0, paintExtent: 300.0,\n' ' │ maxPaintExtent: 300.0, cacheExtent: 300.0)\n' ' │ currently live children: 0 to 2\n' diff --git a/packages/flutter/test/widgets/sliver_fill_viewport_test.dart b/packages/flutter/test/widgets/sliver_fill_viewport_test.dart index a08d235a979..442f54c8c53 100644 --- a/packages/flutter/test/widgets/sliver_fill_viewport_test.dart +++ b/packages/flutter/test/widgets/sliver_fill_viewport_test.dart @@ -70,10 +70,10 @@ void main() { ' │ parentData: paintOffset=Offset(0.0, 0.0) (can use size)\n' ' │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ 0.0, remainingPaintExtent: 600.0, crossAxisExtent: 800.0,\n' - ' │ crossAxisDirection: AxisDirection.right,\n' - ' │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 850.0,\n' - ' │ cacheOrigin: 0.0)\n' + ' │ 0.0, precedingScrollExtent: 0.0, remainingPaintExtent: 600.0,\n' + ' │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ remainingCacheExtent: 850.0, cacheOrigin: 0.0)\n' ' │ geometry: SliverGeometry(scrollExtent: 12000.0, paintExtent:\n' ' │ 600.0, maxPaintExtent: 12000.0, hasVisualOverflow: true,\n' ' │ cacheExtent: 850.0)\n' @@ -83,10 +83,10 @@ void main() { ' │ parentData: paintOffset=Offset(0.0, 0.0) (can use size)\n' ' │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ 0.0, remainingPaintExtent: 600.0, crossAxisExtent: 800.0,\n' - ' │ crossAxisDirection: AxisDirection.right,\n' - ' │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 850.0,\n' - ' │ cacheOrigin: 0.0)\n' + ' │ 0.0, precedingScrollExtent: 0.0, remainingPaintExtent: 600.0,\n' + ' │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ remainingCacheExtent: 850.0, cacheOrigin: 0.0)\n' ' │ geometry: SliverGeometry(scrollExtent: 12000.0, paintExtent:\n' ' │ 600.0, maxPaintExtent: 12000.0, hasVisualOverflow: true,\n' ' │ cacheExtent: 850.0)\n' diff --git a/packages/flutter/test/widgets/slivers_appbar_pinned_test.dart b/packages/flutter/test/widgets/slivers_appbar_pinned_test.dart index 2651ec271d3..20fab967585 100644 --- a/packages/flutter/test/widgets/slivers_appbar_pinned_test.dart +++ b/packages/flutter/test/widgets/slivers_appbar_pinned_test.dart @@ -88,10 +88,10 @@ void main() { ' │ parentData: paintOffset=Offset(0.0, 0.0) (can use size)\n' ' │ constraints: SliverConstraints(AxisDirection.down,\n' ' │ GrowthDirection.forward, ScrollDirection.idle, scrollOffset:\n' - ' │ 0.0, remainingPaintExtent: 600.0, crossAxisExtent: 800.0,\n' - ' │ crossAxisDirection: AxisDirection.right,\n' - ' │ viewportMainAxisExtent: 600.0, remainingCacheExtent: 850.0,\n' - ' │ cacheOrigin: 0.0)\n' + ' │ 0.0, precedingScrollExtent: 0.0, remainingPaintExtent: 600.0,\n' + ' │ crossAxisExtent: 800.0, crossAxisDirection:\n' + ' │ AxisDirection.right, viewportMainAxisExtent: 600.0,\n' + ' │ remainingCacheExtent: 850.0, cacheOrigin: 0.0)\n' ' │ geometry: SliverGeometry(scrollExtent: 200.0, paintExtent: 200.0,\n' ' │ maxPaintExtent: 200.0, hasVisualOverflow: true, cacheExtent:\n' ' │ 200.0)\n'