// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // @dart = 2.8 import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('precedingScrollExtent is reported as infinity for Sliver of unknown size', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( home: CustomScrollView( slivers: <Widget>[ const SliverToBoxAdapter(child: SizedBox(width: double.infinity, height: 150.0)), const SliverToBoxAdapter(child: SizedBox(width: double.infinity, height: 150.0)), SliverList( delegate: SliverChildBuilderDelegate((BuildContext context, int index) { if (index < 100) { return const SizedBox(width: double.infinity, height: 150.0); } else { return null; } }), ), const SliverToBoxAdapter( key: Key('final_sliver'), child: SizedBox(width: double.infinity, height: 150.0), ), ], ), ), ); // The last Sliver comes after a SliverList that has many more items than // can fit in the viewport, and the SliverList doesn't report a child count, // so the SliverList leads to an infinite precedingScrollExtent. final RenderViewport renderViewport = tester.renderObject(find.byType(Viewport)); final RenderSliver lastRenderSliver = renderViewport.lastChild; expect(lastRenderSliver.constraints.precedingScrollExtent, double.infinity); }); }