blob: 0fa6bf5eff40e174470333d2ba033d2166866bc9 [file] [log] [blame]
// 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.
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
const double VIEWPORT_HEIGHT = 500;
const double VIEWPORT_WIDTH = 300;
void main() {
testWidgets('SliverConstrainedCrossAxis basic test', (WidgetTester tester) async {
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(maxExtent: 50));
final RenderBox box = tester.renderObject(find.byType(Container));
expect(box.size.height, 100);
expect(box.size.width, 50);
final RenderSliver sliver = tester.renderObject(find.byType(SliverToBoxAdapter));
expect(sliver.geometry!.paintExtent, equals(100));
});
testWidgets('SliverConstrainedCrossAxis updates correctly', (WidgetTester tester) async {
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(maxExtent: 50));
final RenderBox box1 = tester.renderObject(find.byType(Container));
expect(box1.size.height, 100);
expect(box1.size.width, 50);
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(maxExtent: 80));
final RenderBox box2 = tester.renderObject(find.byType(Container));
expect(box2.size.height, 100);
expect(box2.size.width, 80);
});
testWidgets('SliverConstrainedCrossAxis uses parent extent if maxExtent is greater', (WidgetTester tester) async {
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(maxExtent: 400));
final RenderBox box = tester.renderObject(find.byType(Container));
expect(box.size.height, 100);
expect(box.size.width, VIEWPORT_WIDTH);
});
testWidgets('SliverConstrainedCrossAxis constrains the height when direction is horizontal', (WidgetTester tester) async {
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(
maxExtent: 50,
scrollDirection: Axis.horizontal,
));
final RenderBox box = tester.renderObject(find.byType(Container));
expect(box.size.height, 50);
});
testWidgets('SliverConstrainedCrossAxis sets its own flex to 0', (WidgetTester tester) async {
await tester.pumpWidget(_buildSliverConstrainedCrossAxis(
maxExtent: 50,
));
final RenderSliver sliver = tester.renderObject(find.byType(SliverConstrainedCrossAxis));
expect((sliver.parentData! as SliverPhysicalParentData).crossAxisFlex, equals(0));
});
}
Widget _buildSliverConstrainedCrossAxis({
required double maxExtent,
Axis scrollDirection = Axis.vertical,
}) {
return Directionality(
textDirection: TextDirection.ltr,
child: Center(
child: SizedBox(
width: VIEWPORT_WIDTH,
height: VIEWPORT_HEIGHT,
child: CustomScrollView(
scrollDirection: scrollDirection,
slivers: <Widget>[
SliverConstrainedCrossAxis(
maxExtent: maxExtent,
sliver: SliverToBoxAdapter(
child: scrollDirection == Axis.vertical
? Container(height: 100)
: Container(width: 100),
),
),
],
),
),
),
);
}