anchor.diff:  // and support multiple transition types
   const Duration _kTransitionDuration = const Duration(milliseconds: 150);
   const Point _kTransitionStartPoint = const Point(0.0, 75.0);
  -enum TransitionDirection { forward, reverse }
   class Transition extends AnimatedComponent {
     Transition({
       Key key,
  
positive.code:       Transition transition = new Transition(
          key: new Key.fromObjectIdentity(historyEntry),
          content: content,
          direction: (i <= state.historyIndex) ? TransitionDirection.forward : TransitionDirection.reverse,
          interactive: (i == state.historyIndex),
          onDismissed: () {
            setState(() {
  
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();
      }
    }
  
  