Commit 2d824894 authored by Adam Barth's avatar Adam Barth

Popup menu in Stocks throws exception

Previously, we were putting a ForcedLayer just below the overlay, but that
causes trouble for routes like the popup menu that want to position themselves
inside the overlay. Instead, I've moved the ForcedLayer down into ModalRoute.

Also, rename ForcedLayer to RepaintBoundary, which is more descriptive of what
this widget does.

Fixes #485
parent 5734821f
...@@ -62,25 +62,27 @@ class _DrawerRoute extends OverlayRoute { ...@@ -62,25 +62,27 @@ class _DrawerRoute extends OverlayRoute {
_DrawerState _state = _DrawerState.showing; _DrawerState _state = _DrawerState.showing;
Widget _build(BuildContext context) { Widget _build(BuildContext context) {
return new _DrawerController( return new RepaintBoundary(
key: _drawerKey, child: new _DrawerController(
settleDuration: _kBaseSettleDuration, key: _drawerKey,
onClosed: () { settleDuration: _kBaseSettleDuration,
_DrawerState previousState = _state; onClosed: () {
_state = _DrawerState.closed; _DrawerState previousState = _state;
switch (previousState) { _state = _DrawerState.closed;
case _DrawerState.showing: switch (previousState) {
Navigator.of(context).pop(); case _DrawerState.showing:
break; Navigator.of(context).pop();
case _DrawerState.popped: break;
super.didPop(null); case _DrawerState.popped:
break; super.didPop(null);
case _DrawerState.closed: break;
assert(false); case _DrawerState.closed:
break; assert(false);
} break;
}, }
child: new _Drawer(route: this) },
child: new _Drawer(route: this)
)
); );
} }
...@@ -202,7 +204,7 @@ class _DrawerControllerState extends State<_DrawerController> { ...@@ -202,7 +204,7 @@ class _DrawerControllerState extends State<_DrawerController> {
widthFactor: _performance.progress, widthFactor: _performance.progress,
child: new SizeObserver( child: new SizeObserver(
onSizeChanged: _handleSizeChanged, onSizeChanged: _handleSizeChanged,
child: new ForcedLayer( child: new RepaintBoundary(
child: config.child child: config.child
) )
) )
......
...@@ -1061,7 +1061,7 @@ class RenderPointerListener extends RenderProxyBox { ...@@ -1061,7 +1061,7 @@ class RenderPointerListener extends RenderProxyBox {
/// previously. Similarly, when the child repaints but the surround tree does /// 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 /// not, we can re-record its display list without re-recording the display list
/// for the surround tree. /// for the surround tree.
class RenderForcedLayer extends RenderProxyBox { class RenderRepaintBoundary extends RenderProxyBox {
bool get hasLayer => true; bool get hasLayer => true;
} }
......
...@@ -1321,9 +1321,9 @@ class Listener extends OneChildRenderObjectWidget { ...@@ -1321,9 +1321,9 @@ class Listener extends OneChildRenderObjectWidget {
} }
} }
class ForcedLayer extends OneChildRenderObjectWidget { class RepaintBoundary extends OneChildRenderObjectWidget {
ForcedLayer({ Key key, Widget child }) : super(key: key, child: child); RepaintBoundary({ Key key, Widget child }) : super(key: key, child: child);
RenderForcedLayer createRenderObject() => new RenderForcedLayer(); RenderRepaintBoundary createRenderObject() => new RenderRepaintBoundary();
} }
class IgnorePointer extends OneChildRenderObjectWidget { class IgnorePointer extends OneChildRenderObjectWidget {
......
...@@ -39,9 +39,7 @@ abstract class OverlayRoute extends Route { ...@@ -39,9 +39,7 @@ abstract class OverlayRoute extends Route {
void didPush(OverlayState overlay, OverlayEntry insertionPoint) { void didPush(OverlayState overlay, OverlayEntry insertionPoint) {
for (WidgetBuilder builder in builders) { for (WidgetBuilder builder in builders) {
_overlayEntries.add(new OverlayEntry(builder: (BuildContext context) { _overlayEntries.add(new OverlayEntry(builder: builder));
return new ForcedLayer(child: builder(context));
}));
overlay?.insert(_overlayEntries.last, above: insertionPoint); overlay?.insert(_overlayEntries.last, above: insertionPoint);
insertionPoint = _overlayEntries.last; insertionPoint = _overlayEntries.last;
} }
...@@ -170,6 +168,7 @@ class _ModalScope extends StatusTransitionComponent { ...@@ -170,6 +168,7 @@ class _ModalScope extends StatusTransitionComponent {
) )
); );
} }
contents = new RepaintBoundary(child: contents);
ModalPosition position = route.position; ModalPosition position = route.position;
if (position == null) if (position == null)
return contents; 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