Commit f97a125e authored by Adam Barth's avatar Adam Barth

Merge pull request #487 from abarth/fix_menu_crash

Popup menu in Stocks throws exception
parents 2e2aa748 2d824894
......@@ -62,25 +62,27 @@ class _DrawerRoute extends OverlayRoute {
_DrawerState _state = _DrawerState.showing;
Widget _build(BuildContext context) {
return new _DrawerController(
key: _drawerKey,
settleDuration: _kBaseSettleDuration,
onClosed: () {
_DrawerState previousState = _state;
_state = _DrawerState.closed;
switch (previousState) {
case _DrawerState.showing:
Navigator.of(context).pop();
break;
case _DrawerState.popped:
super.didPop(null);
break;
case _DrawerState.closed:
assert(false);
break;
}
},
child: new _Drawer(route: this)
return new RepaintBoundary(
child: new _DrawerController(
key: _drawerKey,
settleDuration: _kBaseSettleDuration,
onClosed: () {
_DrawerState previousState = _state;
_state = _DrawerState.closed;
switch (previousState) {
case _DrawerState.showing:
Navigator.of(context).pop();
break;
case _DrawerState.popped:
super.didPop(null);
break;
case _DrawerState.closed:
assert(false);
break;
}
},
child: new _Drawer(route: this)
)
);
}
......@@ -202,7 +204,7 @@ class _DrawerControllerState extends State<_DrawerController> {
widthFactor: _performance.progress,
child: new SizeObserver(
onSizeChanged: _handleSizeChanged,
child: new ForcedLayer(
child: new RepaintBoundary(
child: config.child
)
)
......
......@@ -1061,7 +1061,7 @@ class RenderPointerListener extends RenderProxyBox {
/// previously. Similarly, when the child repaints but the surround tree does
/// not, we can re-record its display list without re-recording the display list
/// for the surround tree.
class RenderForcedLayer extends RenderProxyBox {
class RenderRepaintBoundary extends RenderProxyBox {
bool get hasLayer => true;
}
......
......@@ -1337,9 +1337,9 @@ class Listener extends OneChildRenderObjectWidget {
}
}
class ForcedLayer extends OneChildRenderObjectWidget {
ForcedLayer({ Key key, Widget child }) : super(key: key, child: child);
RenderForcedLayer createRenderObject() => new RenderForcedLayer();
class RepaintBoundary extends OneChildRenderObjectWidget {
RepaintBoundary({ Key key, Widget child }) : super(key: key, child: child);
RenderRepaintBoundary createRenderObject() => new RenderRepaintBoundary();
}
class IgnorePointer extends OneChildRenderObjectWidget {
......
......@@ -39,9 +39,7 @@ abstract class OverlayRoute extends Route {
void didPush(OverlayState overlay, OverlayEntry insertionPoint) {
for (WidgetBuilder builder in builders) {
_overlayEntries.add(new OverlayEntry(builder: (BuildContext context) {
return new ForcedLayer(child: builder(context));
}));
_overlayEntries.add(new OverlayEntry(builder: builder));
overlay?.insert(_overlayEntries.last, above: insertionPoint);
insertionPoint = _overlayEntries.last;
}
......@@ -170,6 +168,7 @@ class _ModalScope extends StatusTransitionComponent {
)
);
}
contents = new RepaintBoundary(child: contents);
ModalPosition position = route.position;
if (position == null)
return contents;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment