anchor.diff:  import 'basic.dart';
   import 'popup_menu_item.dart';
   
  -const double _kMenuOpenDuration = 300.0;
  -const double _kMenuCloseDuration = 200.0;
  -const double _kMenuCloseDelay = 100.0;
  +const Duration _kMenuOpenDuration = const Duration(milliseconds: 300);
  +const Duration _kMenuCloseDuration = const Duration(milliseconds: 200);
  +const Duration _kMenuCloseDelay = const Duration(milliseconds: 100);
   const double _kMenuWidthStep = 56.0;
   const double _kMenuMargin = 16.0; // 24.0 on tablet
   const double _kMenuMinWidth = 2.0 * _kMenuWidthStep;
  
positive.code: const double _kMenuHorizontalPadding = 16.0;
  const double _kMenuVerticalPadding = 8.0;
  
  enum MenuState { hidden, opening, open, closing }
  
  class PopupMenuController {
    AnimatedValue position = new AnimatedValue(0.0);
    MenuState _state = MenuState.hidden;
    MenuState get state => _state;
  
    bool get canReact => (_state == MenuState.opening) || (_state == MenuState.open);
  
    open() async {
      if (_state != MenuState.hidden)
        return;
      _state = MenuState.opening;
      if (await position.animateTo(1.0, _kMenuOpenDuration) == 1.0)
        _state = MenuState.open;
    }
  
    Future _closeState;
    close() async {
      var result = new Completer();
      _closeState = result.future;
      if ((_state == MenuState.opening) || (_state == MenuState.open)) {
        _state = MenuState.closing;
        await position.animateTo(0.0, _kMenuCloseDuration, initialDelay: _kMenuCloseDelay);
        _state = MenuState.hidden;
        _closeState = null;
        result.complete();
        return result.future;
      }
      assert(_closeState != null);
      return _closeState;
    }
  }
  
  
negative.code: import 'dart:math' as math;
  import 'dart:sky' as sky;
  
  import '../animation/animation_performance.dart';
  import '../painting/box_painter.dart';
  import '../theme/colors.dart';
  import '../theme/shadows.dart';
  