| 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;
|
| + }
|
| + });
|
| + }
|
| +}
|
|
|