Skip to content

Commit ff5e2d5

Browse files
authored
Add test for animated_align.0.dart API example. (#146719)
This PR contributes to flutter/flutter#130459 ### Description - Adds `examples/api/test/widgets/implicit_animations/animated_align.0_test.dart` test
1 parent 47ce800 commit ff5e2d5

File tree

3 files changed

+97
-5
lines changed

3 files changed

+97
-5
lines changed

dev/bots/check_code_samples.dart

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

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

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,33 @@ void main() => runApp(const AnimatedAlignExampleApp());
1111
class AnimatedAlignExampleApp extends StatelessWidget {
1212
const AnimatedAlignExampleApp({super.key});
1313

14+
static const Duration duration = Duration(seconds: 1);
15+
static const Curve curve = Curves.fastOutSlowIn;
16+
1417
@override
1518
Widget build(BuildContext context) {
1619
return MaterialApp(
1720
home: Scaffold(
1821
appBar: AppBar(title: const Text('AnimatedAlign Sample')),
19-
body: const AnimatedAlignExample(),
22+
body: const AnimatedAlignExample(
23+
duration: duration,
24+
curve: curve,
25+
),
2026
),
2127
);
2228
}
2329
}
2430

2531
class AnimatedAlignExample extends StatefulWidget {
26-
const AnimatedAlignExample({super.key});
32+
const AnimatedAlignExample({
33+
required this.duration,
34+
required this.curve,
35+
super.key,
36+
});
37+
38+
final Duration duration;
39+
40+
final Curve curve;
2741

2842
@override
2943
State<AnimatedAlignExample> createState() => _AnimatedAlignExampleState();
@@ -47,8 +61,8 @@ class _AnimatedAlignExampleState extends State<AnimatedAlignExample> {
4761
color: Colors.red,
4862
child: AnimatedAlign(
4963
alignment: selected ? Alignment.topRight : Alignment.bottomLeft,
50-
duration: const Duration(seconds: 1),
51-
curve: Curves.fastOutSlowIn,
64+
duration: widget.duration,
65+
curve: widget.curve,
5266
child: const FlutterLogo(size: 50.0),
5367
),
5468
),
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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 'package:flutter/material.dart';
6+
import 'package:flutter_api_samples/widgets/implicit_animations/animated_align.0.dart'
7+
as example;
8+
import 'package:flutter_test/flutter_test.dart';
9+
10+
void main() {
11+
testWidgets('AnimatedAlign animates on tap', (WidgetTester tester) async {
12+
await tester.pumpWidget(
13+
const example.AnimatedAlignExampleApp(),
14+
);
15+
16+
final Finder alignFinder = find.descendant(
17+
of: find.byType(AnimatedAlign),
18+
matching: find.byType(Align),
19+
);
20+
21+
const Alignment beginAlignment = Alignment.bottomLeft;
22+
const Alignment endAlignment = Alignment.topRight;
23+
24+
Align align = tester.widget(alignFinder);
25+
expect(align.alignment, beginAlignment);
26+
27+
// Tap on the AnimatedAlignExample to start the forward animation.
28+
await tester.tap(find.byType(example.AnimatedAlignExample));
29+
await tester.pump();
30+
31+
align = tester.widget(alignFinder);
32+
expect(align.alignment, beginAlignment);
33+
34+
// Advance animation to the middle.
35+
await tester.pump(example.AnimatedAlignExampleApp.duration ~/ 2);
36+
37+
align = tester.widget(alignFinder);
38+
expect(
39+
align.alignment,
40+
Alignment.lerp(
41+
beginAlignment,
42+
endAlignment,
43+
example.AnimatedAlignExampleApp.curve.transform(0.5),
44+
),
45+
);
46+
47+
// Advance animation to the end.
48+
await tester.pump(example.AnimatedAlignExampleApp.duration ~/ 2);
49+
50+
align = tester.widget(alignFinder);
51+
expect(align.alignment, endAlignment);
52+
53+
// Tap on the AnimatedAlignExample again to start the reverse animation.
54+
await tester.tap(find.byType(example.AnimatedAlignExample));
55+
await tester.pump();
56+
57+
align = tester.widget(alignFinder);
58+
expect(align.alignment, endAlignment);
59+
60+
// Advance animation to the middle.
61+
await tester.pump(example.AnimatedAlignExampleApp.duration ~/ 2);
62+
63+
align = tester.widget(alignFinder);
64+
expect(
65+
align.alignment,
66+
Alignment.lerp(
67+
endAlignment,
68+
beginAlignment,
69+
example.AnimatedAlignExampleApp.curve.transform(0.5),
70+
),
71+
);
72+
73+
// Advance animation to the end.
74+
await tester.pump(example.AnimatedAlignExampleApp.duration ~/ 2);
75+
76+
align = tester.widget(alignFinder);
77+
expect(align.alignment, beginAlignment);
78+
});
79+
}

0 commit comments

Comments
 (0)