Wire up popup menus to back button

R=abarth@chromium.org, abarth

Review URL: https://codereview.chromium.org/1237213003 .
This commit is contained in:
Collin Jackson 2015-07-15 13:40:38 -07:00
parent 781413c925
commit cb86e621f9
3 changed files with 24 additions and 6 deletions

View File

@ -306,6 +306,7 @@ class StockHome extends AnimatedComponent {
children: [new StockMenu(
showing: _menuShowing,
onStatusChanged: _handleMenuStatusChanged,
navigator: navigator,
autorefresh: _autorefresh,
onAutorefreshChanged: _handleAutorefreshChanged
)],

View File

@ -6,6 +6,7 @@ import 'dart:sky' as sky;
import 'package:sky/widgets/basic.dart';
import 'package:sky/widgets/checkbox.dart';
import 'package:sky/widgets/navigator.dart';
import 'package:sky/widgets/popup_menu_item.dart';
import 'package:sky/widgets/popup_menu.dart';
@ -16,12 +17,14 @@ class StockMenu extends Component {
String key,
this.showing,
this.onStatusChanged,
this.navigator,
this.autorefresh: false,
this.onAutorefreshChanged
}) : super(key: key);
bool showing;
PopupMenuStatusChangedCallback onStatusChanged;
final bool showing;
final PopupMenuStatusChangedCallback onStatusChanged;
final Navigator navigator;
final bool autorefresh;
final ValueChanged onAutorefreshChanged;
@ -40,7 +43,8 @@ class StockMenu extends Component {
],
level: 4,
showing: showing,
onStatusChanged: onStatusChanged
onStatusChanged: onStatusChanged,
navigator: navigator
),
right: sky.view.paddingRight,
top: sky.view.paddingTop

View File

@ -11,6 +11,7 @@ import 'package:sky/theme/colors.dart';
import 'package:sky/theme/shadows.dart';
import 'package:sky/widgets/animated_component.dart';
import 'package:sky/widgets/basic.dart';
import 'package:sky/widgets/navigator.dart';
import 'package:sky/widgets/popup_menu_item.dart';
import 'package:sky/widgets/scrollable_viewport.dart';
@ -37,13 +38,15 @@ class PopupMenu extends AnimatedComponent {
this.showing,
this.onStatusChanged,
this.items,
this.level
this.level,
this.navigator
}) : super(key: key);
bool showing;
PopupMenuStatusChangedCallback onStatusChanged;
List<PopupMenuItem> items;
int level;
Navigator navigator;
AnimatedType<double> _opacity;
AnimatedType<double> _width;
@ -79,6 +82,7 @@ class PopupMenu extends AnimatedComponent {
if (items.length != source.items.length)
_updateAnimationVariables();
items = source.items;
navigator = source.navigator;
super.syncFields(source);
}
@ -115,14 +119,23 @@ class PopupMenu extends AnimatedComponent {
PopupMenuStatus _lastStatus;
void _checkForStateChanged() {
PopupMenuStatus status = _status;
if (_lastStatus != null && status != _lastStatus && onStatusChanged != null)
onStatusChanged(status);
if (_lastStatus != null && status != _lastStatus) {
if (status == PopupMenuStatus.inactive &&
navigator != null &&
navigator.currentRoute.key == this)
navigator.pop();
if (onStatusChanged != null)
onStatusChanged(status);
}
_lastStatus = status;
}
void _open() {
_animationList.interval = null;
_performance.play();
if (navigator != null)
navigator.pushState(this, (_) => _close());
}
void _close() {