anchor.diff:  import 'package:sky/animation/animated_value.dart';
   import 'package:sky/animation/animation_performance.dart';
   import 'package:sky/animation/curves.dart';
  +import 'package:sky/animation/forces.dart';
   import 'package:sky/widgets/animated_component.dart';
   import 'package:sky/widgets/basic.dart';
   import 'package:sky/widgets/focus.dart';
  
positive.code:     this.interactive
    }): super(key: key);
    Widget content;
    TransitionDirection direction;
    bool interactive;
    Function onDismissed;
    Function onCompleted;
  
negative.code:       end: Point.origin,
        curve: easeOut
      );
      _opacity = new AnimatedValue<double>(0.0, end: 1.0, curve: easeOut);
      _performance = new AnimationPerformance(duration: _kTransitionDuration)
        ..variable = new AnimatedList([_position, _opacity]);
      if (direction == Direction.reverse)
        _performance.progress = 1.0;
      _performance.addStatusListener(_checkStatusChanged);
      watch(_performance);
      _start();
    }
  
    void _start() {
      _performance.play(direction);
    }
  
    void syncFields(Transition source) {
      content = source.content;
      interactive = source.interactive;
      onDismissed = source.onDismissed;
      if (direction != source.direction) {
        direction = source.direction;
        _start();
      }
      super.syncFields(source);
    }
  
    void _checkStatusChanged(AnimationStatus status) {
      if (_performance.isDismissed) {
        if (onDismissed != null)
          onDismissed();
      } else if (_performance.isCompleted) {
        if (onCompleted != null)
          onCompleted();
      }
    }
  
  