Fix crash in Block.

This assert was overzealous. You can update a RawGestureDetector any
time before the semantics phase, it doesn't have to only be during your
child's layout.

This is good because Block has additional PointerListeners between its
GestureDetector and its Viewport.
This commit is contained in:
Hixie 2016-02-26 15:55:17 -08:00
parent 13b8777f89
commit fcb3071936

View File

@ -279,22 +279,8 @@ class RawGestureDetectorState extends State<RawGestureDetector> {
/// the gesture detector should be enabled. /// the gesture detector should be enabled.
void replaceGestureRecognizers(Map<Type, GestureRecognizerFactory> gestures) { void replaceGestureRecognizers(Map<Type, GestureRecognizerFactory> gestures) {
assert(() { assert(() {
RenderObject renderObject = context.findRenderObject(); if (!RenderObject.debugDoingLayout)
if (!config.excludeFromSemantics) { throw new WidgetError('replaceGestureRecognizers() can only be called during the layout phase.');
assert(renderObject is RenderSemanticsGestureHandler);
RenderSemanticsGestureHandler semanticsGestureHandler = renderObject;
renderObject = semanticsGestureHandler.child;
}
assert(renderObject is RenderPointerListener);
RenderPointerListener pointerListener = renderObject;
renderObject = pointerListener.child;
if (!renderObject.debugDoingThisLayout) {
throw new WidgetError(
'replaceGestureRecognizers() can only be called during the layout phase of the GestureDetector\'s nearest descendant RenderObjectWidget.\n'
'In this particular case, that is:\n'
' $renderObject'
);
}
return true; return true;
}); });
_syncAll(gestures); _syncAll(gestures);