mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Wire up popup menus to back button
R=abarth@chromium.org, abarth Review URL: https://codereview.chromium.org/1237213003 .
This commit is contained in:
parent
781413c925
commit
cb86e621f9
@ -306,6 +306,7 @@ class StockHome extends AnimatedComponent {
|
||||
children: [new StockMenu(
|
||||
showing: _menuShowing,
|
||||
onStatusChanged: _handleMenuStatusChanged,
|
||||
navigator: navigator,
|
||||
autorefresh: _autorefresh,
|
||||
onAutorefreshChanged: _handleAutorefreshChanged
|
||||
)],
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user