Skip to content

Commit d337c20

Browse files
committed
Merge branch 'master' of git://github.com/platform-platform/FlutterSwitch into platform-platform-master
2 parents 63d54d9 + 71d77a3 commit d337c20

2 files changed

Lines changed: 114 additions & 2 deletions

File tree

lib/flutter_switch.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,12 @@ class _FlutterSwitchState extends State<FlutterSwitch>
173173
super.initState();
174174
_animationController = AnimationController(
175175
vsync: this,
176+
value: widget.value ? 1.0 : 0.0,
176177
duration: Duration(milliseconds: 60),
177178
);
178179
_toggleAnimation = AlignmentTween(
179-
begin: widget.value ? Alignment.centerRight : Alignment.centerLeft,
180-
end: widget.value ? Alignment.centerLeft : Alignment.centerRight,
180+
begin: Alignment.centerLeft,
181+
end: Alignment.centerRight,
181182
).animate(
182183
CurvedAnimation(parent: _animationController, curve: Curves.linear),
183184
);
@@ -192,6 +193,9 @@ class _FlutterSwitchState extends State<FlutterSwitch>
192193
@override
193194
void didUpdateWidget(FlutterSwitch oldWidget) {
194195
super.didUpdateWidget(oldWidget);
196+
197+
if (oldWidget.value == widget.value) return;
198+
195199
if (widget.value)
196200
_animationController.forward();
197201
else

test/flutter_switch_test.dart

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_test/flutter_test.dart';
3+
4+
import '../lib/flutter_switch.dart';
5+
6+
void main() {
7+
group("FlutterSwitch", () {
8+
final alignToggleIndicatorFinder = find.byWidgetPredicate(
9+
(widget) => widget is Align && widget.child is Container);
10+
11+
testWidgets(
12+
"displays the toggle indicator on the right if the given value is true",
13+
(WidgetTester tester) async {
14+
await tester.pumpWidget(
15+
_FlutterSwitchTestbed(
16+
value: true,
17+
),
18+
);
19+
20+
final align = tester.widget<Align>(alignToggleIndicatorFinder);
21+
22+
expect(align.alignment, equals(Alignment.centerRight));
23+
},
24+
);
25+
26+
testWidgets(
27+
"displays the toggle indicator on the left if the given value is false",
28+
(WidgetTester tester) async {
29+
await tester.pumpWidget(
30+
_FlutterSwitchTestbed(
31+
value: false,
32+
),
33+
);
34+
35+
final align = tester.widget<Align>(alignToggleIndicatorFinder);
36+
37+
expect(align.alignment, equals(Alignment.centerLeft));
38+
},
39+
);
40+
41+
testWidgets(
42+
"changes the toggle indicator alignment to the right on tap when the given value is false",
43+
(WidgetTester tester) async {
44+
await tester.pumpWidget(
45+
_FlutterSwitchTestbed(
46+
value: false,
47+
),
48+
);
49+
50+
await tester.tap(find.byType(FlutterSwitch));
51+
await tester.pump();
52+
53+
final align = tester.widget<Align>(alignToggleIndicatorFinder);
54+
55+
expect(align.alignment, equals(Alignment.centerLeft));
56+
},
57+
);
58+
59+
testWidgets(
60+
"changes the toggle indicator alignment to the left on tap when the given value is true",
61+
(WidgetTester tester) async {
62+
await tester.pumpWidget(
63+
_FlutterSwitchTestbed(
64+
value: true,
65+
),
66+
);
67+
68+
await tester.tap(find.byType(FlutterSwitch));
69+
await tester.pumpAndSettle();
70+
71+
final align = tester.widget<Align>(alignToggleIndicatorFinder);
72+
73+
expect(align.alignment, equals(Alignment.centerLeft));
74+
},
75+
);
76+
});
77+
}
78+
79+
/// A testbed class needed to test the [FlutterSwitch] widget.
80+
class _FlutterSwitchTestbed extends StatelessWidget {
81+
/// A callback that is called when the switch is toggled.
82+
final ValueChanged<bool> onToggle;
83+
84+
/// An initial value of the switch.
85+
final bool value;
86+
87+
/// Creates a new instance of this testbed.
88+
const _FlutterSwitchTestbed({
89+
Key key,
90+
this.onToggle = _defaultOnToggle,
91+
this.value,
92+
}) : super(key: key);
93+
94+
@override
95+
Widget build(BuildContext context) {
96+
return MaterialApp(
97+
home: Scaffold(
98+
body: FlutterSwitch(
99+
value: value,
100+
onToggle: onToggle,
101+
),
102+
),
103+
);
104+
}
105+
106+
/// A default on toggle callback of the switch.
107+
static void _defaultOnToggle(bool value) {}
108+
}

0 commit comments

Comments
 (0)