@@ -187,6 +187,8 @@ void main() {
187187 expect (controller.value, moreOrLessEquals (0.0 ));
188188 controller.stop ();
189189
190+ controller.dispose ();
191+
190192 // Swap which duration is longer.
191193 controller = AnimationController (
192194 duration: const Duration (milliseconds: 50 ),
@@ -220,6 +222,98 @@ void main() {
220222 controller.dispose ();
221223 });
222224
225+ test ('toggle() with different durations' , () {
226+ AnimationController controller = AnimationController (
227+ duration: const Duration (milliseconds: 100 ),
228+ reverseDuration: const Duration (milliseconds: 50 ),
229+ vsync: const TestVSync (),
230+ );
231+
232+ controller.toggle ();
233+ tick (const Duration (milliseconds: 10 ));
234+ tick (const Duration (milliseconds: 30 ));
235+ expect (controller.value, moreOrLessEquals (0.2 ));
236+ tick (const Duration (milliseconds: 60 ));
237+ expect (controller.value, moreOrLessEquals (0.5 ));
238+ tick (const Duration (milliseconds: 90 ));
239+ expect (controller.value, moreOrLessEquals (0.8 ));
240+ tick (const Duration (milliseconds: 120 ));
241+ expect (controller.value, moreOrLessEquals (1.0 ));
242+ controller.stop ();
243+
244+ controller.toggle ();
245+ tick (const Duration (milliseconds: 210 ));
246+ tick (const Duration (milliseconds: 220 ));
247+ expect (controller.value, moreOrLessEquals (0.8 ));
248+ tick (const Duration (milliseconds: 230 ));
249+ expect (controller.value, moreOrLessEquals (0.6 ));
250+ tick (const Duration (milliseconds: 240 ));
251+ expect (controller.value, moreOrLessEquals (0.4 ));
252+ tick (const Duration (milliseconds: 260 ));
253+ expect (controller.value, moreOrLessEquals (0.0 ));
254+ controller.stop ();
255+
256+ controller.dispose ();
257+
258+ // Swap which duration is longer.
259+ controller = AnimationController (
260+ duration: const Duration (milliseconds: 50 ),
261+ reverseDuration: const Duration (milliseconds: 100 ),
262+ vsync: const TestVSync (),
263+ );
264+
265+ controller.toggle ();
266+ tick (const Duration (milliseconds: 10 ));
267+ tick (const Duration (milliseconds: 30 ));
268+ expect (controller.value, moreOrLessEquals (0.4 ));
269+ tick (const Duration (milliseconds: 60 ));
270+ expect (controller.value, moreOrLessEquals (1.0 ));
271+ tick (const Duration (milliseconds: 90 ));
272+ expect (controller.value, moreOrLessEquals (1.0 ));
273+ controller.stop ();
274+
275+ controller.toggle ();
276+ tick (const Duration (milliseconds: 210 ));
277+ tick (const Duration (milliseconds: 220 ));
278+ expect (controller.value, moreOrLessEquals (0.9 ));
279+ tick (const Duration (milliseconds: 230 ));
280+ expect (controller.value, moreOrLessEquals (0.8 ));
281+ tick (const Duration (milliseconds: 240 ));
282+ expect (controller.value, moreOrLessEquals (0.7 ));
283+ tick (const Duration (milliseconds: 260 ));
284+ expect (controller.value, moreOrLessEquals (0.5 ));
285+ tick (const Duration (milliseconds: 310 ));
286+ expect (controller.value, moreOrLessEquals (0.0 ));
287+ controller.stop ();
288+ controller.dispose ();
289+ });
290+
291+ test ('toggle() acts correctly based on the animation state' , () {
292+ final AnimationController controller = AnimationController (
293+ duration: const Duration (milliseconds: 100 ),
294+ reverseDuration: const Duration (milliseconds: 100 ),
295+ vsync: const TestVSync (),
296+ );
297+
298+ controller.forward ();
299+ expect (controller.status, AnimationStatus .forward);
300+ expect (controller.isForwardOrCompleted, true );
301+ tick (const Duration (milliseconds: 10 ));
302+ tick (const Duration (milliseconds: 60 ));
303+ expect (controller.value, moreOrLessEquals (0.5 ));
304+ expect (controller.isForwardOrCompleted, true );
305+ controller.toggle ();
306+ tick (const Duration (milliseconds: 10 ));
307+ expect (controller.status, AnimationStatus .reverse);
308+ expect (controller.isForwardOrCompleted, false );
309+ tick (const Duration (milliseconds: 110 ));
310+ expect (controller.value, moreOrLessEquals (0 ));
311+ expect (controller.status, AnimationStatus .dismissed);
312+ expect (controller.isForwardOrCompleted, false );
313+
314+ controller.dispose ();
315+ });
316+
223317 test ('Forward only from value' , () {
224318 final AnimationController controller = AnimationController (
225319 duration: const Duration (milliseconds: 100 ),
0 commit comments