| Index: sky/sdk/lib/framework/components2/animated_component.dart
|
| diff --git a/sky/sdk/lib/framework/components2/animated_component.dart b/sky/sdk/lib/framework/components2/animated_component.dart
|
| index 4cc91e01d0c981dd4c8d4b6dfb36aaa922b6e995..9a02fd531dddd9e5b4ea10c6fea0e09382df625e 100644
|
| --- a/sky/sdk/lib/framework/components2/animated_component.dart
|
| +++ b/sky/sdk/lib/framework/components2/animated_component.dart
|
| @@ -8,27 +8,44 @@ import 'dart:async';
|
|
|
| typedef void SetterFunction(double value);
|
|
|
| +class _AnimationEntry {
|
| + _AnimationEntry(this.value, this.setter);
|
| + final AnimatedValue value;
|
| + final SetterFunction setter;
|
| + StreamSubscription<double> subscription;
|
| +}
|
| +
|
| abstract class AnimatedComponent extends Component {
|
|
|
| AnimatedComponent({ Object key }) : super(key: key, stateful: true);
|
|
|
| void syncFields(AnimatedComponent source) { }
|
|
|
| + List<_AnimationEntry> _animatedFields = new List<_AnimationEntry>();
|
| +
|
| animate(AnimatedValue value, SetterFunction setter) {
|
| + assert(!mounted);
|
| setter(value.value);
|
| - StreamSubscription<double> subscription;
|
| - onDidMount(() {
|
| - subscription = value.onValueChanged.listen((_) {
|
| - setter(value.value);
|
| + _animatedFields.add(new _AnimationEntry(value, setter));
|
| + }
|
| +
|
| + void didMount() {
|
| + for (_AnimationEntry entry in _animatedFields) {
|
| + entry.subscription = entry.value.onValueChanged.listen((_) {
|
| + entry.setter(entry.value.value);
|
| scheduleBuild();
|
| });
|
| - });
|
| - onDidUnmount(() {
|
| - if (subscription != null) {
|
| - subscription.cancel();
|
| - subscription = null;
|
| - }
|
| - });
|
| + }
|
| + super.didMount();
|
| + }
|
| +
|
| + void didUnmount() {
|
| + for (_AnimationEntry entry in _animatedFields) {
|
| + assert(entry.subscription != null);
|
| + entry.subscription.cancel();
|
| + entry.subscription = null;
|
| + }
|
| + super.didUnmount();
|
| }
|
|
|
| }
|
|
|