From ec9df2f269eba51309df44667f7a10a59afba4da Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Fri, 4 Aug 2017 13:04:51 -0700 Subject: [PATCH] Allow Duration.Zero for animateTo (#11515) --- .../lib/src/animation/animation_controller.dart | 5 ++++- .../test/animation/animation_controller_test.dart | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/animation/animation_controller.dart b/packages/flutter/lib/src/animation/animation_controller.dart index 7f4b8c7eca..54bc9c9c2b 100644 --- a/packages/flutter/lib/src/animation/animation_controller.dart +++ b/packages/flutter/lib/src/animation/animation_controller.dart @@ -341,7 +341,10 @@ class AnimationController extends Animation } stop(); if (simulationDuration == Duration.ZERO) { - assert(value == target); + if (value != target) { + _value = target.clamp(lowerBound, upperBound); + notifyListeners(); + } _status = (_direction == _AnimationDirection.forward) ? AnimationStatus.completed : AnimationStatus.dismissed; diff --git a/packages/flutter/test/animation/animation_controller_test.dart b/packages/flutter/test/animation/animation_controller_test.dart index 8c52774505..e55cf07b7d 100644 --- a/packages/flutter/test/animation/animation_controller_test.dart +++ b/packages/flutter/test/animation/animation_controller_test.dart @@ -6,6 +6,7 @@ import 'dart:ui' as ui; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter/animation.dart'; +import 'package:flutter/scheduler.dart'; import 'package:flutter/widgets.dart'; import '../scheduler/scheduler_tester.dart'; @@ -381,4 +382,17 @@ void main() { expect(statusLog, equals([ AnimationStatus.reverse, AnimationStatus.dismissed ])); expect(controller.value, currentValue); }); + + test('animateTo can deal with duration == Duration.ZERO', () { + final AnimationController controller = new AnimationController( + duration: const Duration(milliseconds: 100), + vsync: const TestVSync(), + ); + + controller.forward(from: 0.2); + expect(controller.value, 0.2); + controller.animateTo(1.0, duration: Duration.ZERO); + expect(SchedulerBinding.instance.transientCallbackCount, equals(0), reason: 'Expected no animation.'); + expect(controller.value, 1.0); + }); }