Chromium Code Reviews| Index: sky/framework/components/animated_component.dart |
| diff --git a/sky/framework/components/animated_component.dart b/sky/framework/components/animated_component.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..698b66e626a7cc1dcd4f7361a40ad7c7cf94a663 |
| --- /dev/null |
| +++ b/sky/framework/components/animated_component.dart |
| @@ -0,0 +1,34 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +import '../animation/animated_value.dart'; |
| +import '../fn.dart'; |
| +import 'dart:mirrors'; |
| + |
| +class AnimatedComponent extends Component { |
| + AnimatedComponent({ Object key }) : super(key: key, stateful: true); |
| + |
| + animateField(AnimatedValue value, Symbol symbol) { |
| + // TODO(rafaelw): Assert symbol is present on |this|, is private and |
| + // is over the same parameterized type as the animated value. |
| + var mirror = reflect(this); |
| + var subscription; |
| + |
| + mirror.setField(symbol, value.value); |
| + |
| + onDidMount(() { |
| + subscription = value.onValueChanged.listen((_) { |
| + mirror.setField(symbol, value.value); |
| + scheduleBuild(); |
| + }); |
| + }); |
| + |
| + onDidUnmount(() { |
| + if (subscription != null) { |
| + subscription.cancel(); |
| + subscription = null; |
| + } |
| + }); |
| + } |
| +} |
|
abarth-chromium
2015/03/20 05:41:49
Wow
|