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:
parent
13b8777f89
commit
fcb3071936
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user