anchor.diff:    DrawerStatusChangedCallback onStatusChanged;
     Navigator navigator;
   
  +  AnimatedType<Point> _position;
  +  AnimatedColor _maskColor;
     AnimationPerformance _performance;
  -  AnimationBuilder _builder;
   
     void initState() {
  -    _builder = new AnimationBuilder()
  -      ..position = new AnimatedType<Point>(
  -          new Point(-_kWidth, 0.0), end: Point.origin, curve: _kAnimationCurve);
  -    _performance = _builder.createPerformance([_builder.position],
  -                                                duration: _kBaseSettleDuration)
  -        ..addListener(_checkForStateChanged);
  +    _position = new AnimatedType<Point>(_kClosedPosition, end: _kOpenPosition, curve: _kAnimationCurve);
  +    _maskColor = new AnimatedColor(colors.transparent, end: const Color(0x7F000000));
  +    _performance = new AnimationPerformance()
  +      ..duration = _kBaseSettleDuration
  +      ..variable = new AnimatedList([_position, _maskColor])
  +      ..addListener(_checkForStateChanged);
       watch(_performance);
       if (showing)
         _show();
  +  }
  +
  +  void syncFields(Drawer source) {
  +    children = source.children;
  +    level = source.level;
  +    navigator = source.navigator;
  +    if (showing != source.showing) {
  +      showing = source.showing;
  +      showing ? _show() : _hide();
  +    }
  +    onStatusChanged = source.onStatusChanged;
  +    super.syncFields(source);
     }
   
     void _show() {
  
positive.code:     );
    }
  
    double get xPosition => _builder.position.value.x;
  
    DrawerStatus _lastStatus;
    void _checkForStateChanged() {
      DrawerStatus status = _status;
      if (_lastStatus != null && status != _lastStatus) {
        if (status == DrawerStatus.inactive &&
            navigator != null && 
            navigator.currentRoute.key == this)
          navigator.pop();
        if (onStatusChanged != null)
  
negative.code:     _performance.play();
    }
  
    void _hide() {
      _performance.reverse();
    }
  
    Widget build() {
      var mask = new Listener(
        child: new Container(
          decoration: new BoxDecoration(backgroundColor: _maskColor.value)
        ),
        onGestureTap: handleMaskTap
      );
  
      Matrix4 transform = new Matrix4.identity();
      transform.translate(_position.value.x, _position.value.y);
      Widget content = new Transform(
        transform: transform,
        child: new Container(
          decoration: new BoxDecoration(
            backgroundColor: Theme.of(this).canvasColor,
            boxShadow: shadows[level]),
  