Skip to content

Commit 9ebf80a

Browse files
authored
Add test for sliver_animated_opacity.0.dart API example. (#146722)
This PR contributes to flutter/flutter#130459 ### Description - Adds `examples/api/test/widgets/implicit_animations/sliver_animated_opacity.0_test.dart` test
1 parent 790ce64 commit 9ebf80a

File tree

3 files changed

+106
-6
lines changed

3 files changed

+106
-6
lines changed

dev/bots/check_code_samples.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,6 @@ final Set<String> _knownMissingTests = <String>{
470470
'examples/api/test/widgets/focus_scope/focus.1_test.dart',
471471
'examples/api/test/widgets/focus_scope/focus_scope.0_test.dart',
472472
'examples/api/test/widgets/implicit_animations/animated_fractionally_sized_box.0_test.dart',
473-
'examples/api/test/widgets/implicit_animations/sliver_animated_opacity.0_test.dart',
474473
'examples/api/test/widgets/scroll_view/custom_scroll_view.1_test.dart',
475474
'examples/api/test/widgets/inherited_notifier/inherited_notifier.0_test.dart',
476475
'examples/api/test/animation/curves/curve2_d.0_test.dart',

examples/api/lib/widgets/implicit_animations/sliver_animated_opacity.0.dart

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,43 @@ void main() => runApp(const SliverAnimatedOpacityExampleApp());
1111
class SliverAnimatedOpacityExampleApp extends StatelessWidget {
1212
const SliverAnimatedOpacityExampleApp({super.key});
1313

14+
static const Duration duration = Duration(milliseconds: 500);
15+
static const Curve curve = Curves.easeInOut;
16+
1417
@override
1518
Widget build(BuildContext context) {
1619
return MaterialApp(
1720
home: Scaffold(
1821
appBar: AppBar(title: const Text('SliverAnimatedOpacity Sample')),
1922
body: const Center(
20-
child: SliverAnimatedOpacityExample(),
23+
child: SliverAnimatedOpacityExample(
24+
duration: duration,
25+
curve: curve,
26+
),
2127
),
2228
),
2329
);
2430
}
2531
}
2632

2733
class SliverAnimatedOpacityExample extends StatefulWidget {
28-
const SliverAnimatedOpacityExample({super.key});
34+
const SliverAnimatedOpacityExample({
35+
required this.duration,
36+
required this.curve,
37+
super.key,
38+
});
39+
40+
final Duration duration;
41+
42+
final Curve curve;
2943

3044
@override
31-
State<SliverAnimatedOpacityExample> createState() => _SliverAnimatedOpacityExampleState();
45+
State<SliverAnimatedOpacityExample> createState() =>
46+
_SliverAnimatedOpacityExampleState();
3247
}
3348

34-
class _SliverAnimatedOpacityExampleState extends State<SliverAnimatedOpacityExample>
49+
class _SliverAnimatedOpacityExampleState
50+
extends State<SliverAnimatedOpacityExample>
3551
with SingleTickerProviderStateMixin {
3652
bool _visible = true;
3753

@@ -40,7 +56,8 @@ class _SliverAnimatedOpacityExampleState extends State<SliverAnimatedOpacityExam
4056
return CustomScrollView(slivers: <Widget>[
4157
SliverAnimatedOpacity(
4258
opacity: _visible ? 1.0 : 0.0,
43-
duration: const Duration(milliseconds: 500),
59+
duration: widget.duration,
60+
curve: widget.curve,
4461
sliver: SliverFixedExtentList(
4562
itemExtent: 100.0,
4663
delegate: SliverChildBuilderDelegate(
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
// Copyright 2014 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'dart:ui';
6+
7+
import 'package:flutter/material.dart';
8+
import 'package:flutter_api_samples/widgets/implicit_animations/sliver_animated_opacity.0.dart'
9+
as example;
10+
import 'package:flutter_test/flutter_test.dart';
11+
12+
void main() {
13+
testWidgets(
14+
'SilverAnimatedOpacity animates on FloatingActionButton tap',
15+
(WidgetTester tester) async {
16+
await tester.pumpWidget(
17+
const example.SliverAnimatedOpacityExampleApp(),
18+
);
19+
20+
final Finder fadeTransitionFinder = find.descendant(
21+
of: find.byType(SliverAnimatedOpacity),
22+
matching: find.byType(SliverFadeTransition),
23+
);
24+
25+
const double beginOpacity = 1.0;
26+
const double endOpacity = 0.0;
27+
28+
SliverFadeTransition fadeTransition = tester.widget(fadeTransitionFinder);
29+
expect(fadeTransition.opacity.value, beginOpacity);
30+
31+
// Tap on the FloatingActionButton to start the forward animation.
32+
await tester.tap(find.byType(FloatingActionButton));
33+
await tester.pump();
34+
35+
fadeTransition = tester.widget(fadeTransitionFinder);
36+
expect(fadeTransition.opacity.value, beginOpacity);
37+
38+
// Advance animation to the middle.
39+
await tester.pump(example.SliverAnimatedOpacityExampleApp.duration ~/ 2);
40+
41+
fadeTransition = tester.widget(fadeTransitionFinder);
42+
expect(
43+
fadeTransition.opacity.value,
44+
lerpDouble(
45+
beginOpacity,
46+
endOpacity,
47+
example.SliverAnimatedOpacityExampleApp.curve.transform(0.5),
48+
),
49+
);
50+
51+
// Advance animation to the end.
52+
await tester.pump(example.SliverAnimatedOpacityExampleApp.duration ~/ 2);
53+
54+
fadeTransition = tester.widget(fadeTransitionFinder);
55+
expect(fadeTransition.opacity.value, endOpacity);
56+
57+
// Tap on the FloatingActionButton again to start the reverse animation.
58+
await tester.tap(find.byType(FloatingActionButton));
59+
await tester.pump();
60+
61+
fadeTransition = tester.widget(fadeTransitionFinder);
62+
expect(fadeTransition.opacity.value, endOpacity);
63+
64+
// Advance animation to the middle.
65+
await tester.pump(example.SliverAnimatedOpacityExampleApp.duration ~/ 2);
66+
67+
fadeTransition = tester.widget(fadeTransitionFinder);
68+
expect(
69+
fadeTransition.opacity.value,
70+
lerpDouble(
71+
endOpacity,
72+
beginOpacity,
73+
example.SliverAnimatedOpacityExampleApp.curve.transform(0.5),
74+
),
75+
);
76+
77+
// Advance animation to the end.
78+
await tester.pump(example.SliverAnimatedOpacityExampleApp.duration ~/ 2);
79+
80+
fadeTransition = tester.widget(fadeTransitionFinder);
81+
expect(fadeTransition.opacity.value, beginOpacity);
82+
},
83+
);
84+
}

0 commit comments

Comments
 (0)