| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 import 'animated_component.dart'; | 5 import 'animated_component.dart'; |
| 6 import '../animation/animated_value.dart'; | 6 import '../animation/animated_value.dart'; |
| 7 import '../fn2.dart'; | 7 import '../fn2.dart'; |
| 8 import '../theme/colors.dart'; | 8 import '../theme/colors.dart'; |
| 9 import 'dart:async'; | 9 import 'dart:async'; |
| 10 import 'dart:math' as math; | 10 import 'dart:math' as math; |
| 11 import 'material.dart'; | 11 import 'material.dart'; |
| 12 import 'popup_menu_item.dart'; | 12 import 'popup_menu_item.dart'; |
| 13 | 13 |
| 14 const double _kMenuOpenDuration = 300.0; | 14 const double _kMenuOpenDuration = 300.0; |
| 15 const double _kMenuCloseDuration = 200.0; | 15 const double _kMenuCloseDuration = 200.0; |
| 16 const double _kMenuCloseDelay = 100.0; | 16 const double _kMenuCloseDelay = 100.0; |
| 17 | 17 |
| 18 enum MenuState { Hidden, Opening, Open, Closing } | 18 enum MenuState { hidden, opening, open, closing } |
| 19 | 19 |
| 20 class PopupMenuController { | 20 class PopupMenuController { |
| 21 AnimatedValue position = new AnimatedValue(0.0); | 21 AnimatedValue position = new AnimatedValue(0.0); |
| 22 MenuState _state = MenuState.Hidden; | 22 MenuState _state = MenuState.hidden; |
| 23 MenuState get state => _state; | 23 MenuState get state => _state; |
| 24 | 24 |
| 25 bool get canReact => (_state == MenuState.Opening) || (_state == MenuState.Ope
n); | 25 bool get canReact => (_state == MenuState.opening) || (_state == MenuState.ope
n); |
| 26 | 26 |
| 27 open() async { | 27 open() async { |
| 28 if (_state != MenuState.Hidden) | 28 if (_state != MenuState.hidden) |
| 29 return; | 29 return; |
| 30 _state = MenuState.Opening; | 30 _state = MenuState.opening; |
| 31 if (await position.animateTo(1.0, _kMenuOpenDuration) == 1.0) | 31 if (await position.animateTo(1.0, _kMenuOpenDuration) == 1.0) |
| 32 _state = MenuState.Open; | 32 _state = MenuState.open; |
| 33 } | 33 } |
| 34 | 34 |
| 35 Future _closeState; | 35 Future _closeState; |
| 36 close() async { | 36 close() async { |
| 37 var result = new Completer(); | 37 var result = new Completer(); |
| 38 _closeState = result.future; | 38 _closeState = result.future; |
| 39 if ((_state == MenuState.Opening) || (_state == MenuState.Open)) { | 39 if ((_state == MenuState.opening) || (_state == MenuState.open)) { |
| 40 _state = MenuState.Closing; | 40 _state = MenuState.closing; |
| 41 await position.animateTo(0.0, _kMenuCloseDuration, initialDelay: _kMenuClo
seDelay); | 41 await position.animateTo(0.0, _kMenuCloseDuration, initialDelay: _kMenuClo
seDelay); |
| 42 _state = MenuState.Hidden; | 42 _state = MenuState.hidden; |
| 43 _closeState = null; | 43 _closeState = null; |
| 44 result.complete(); | 44 result.complete(); |
| 45 return result.future; | 45 return result.future; |
| 46 } | 46 } |
| 47 assert(_closeState != null); | 47 assert(_closeState != null); |
| 48 return _closeState; | 48 return _closeState; |
| 49 } | 49 } |
| 50 } | 50 } |
| 51 | 51 |
| 52 class PopupMenu extends AnimatedComponent { | 52 class PopupMenu extends AnimatedComponent { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 | 106 |
| 107 return new Material( | 107 return new Material( |
| 108 content: new Container( | 108 content: new Container( |
| 109 style: _style, | 109 style: _style, |
| 110 inlineStyle: _inlineStyle(), | 110 inlineStyle: _inlineStyle(), |
| 111 children: children | 111 children: children |
| 112 ), | 112 ), |
| 113 level: level); | 113 level: level); |
| 114 } | 114 } |
| 115 } | 115 } |
| OLD | NEW |