Skip to content

setState in onPressed of iconButton while tooltip is visable causes crash #7151

@bit-garden

Description

@bit-garden

https://github.com/bit-garden/flutters/blob/master/rabbit_numbers/lib/main.dart#L61

If you long press on an IconButton and tap on it afterwards, it will cause a crash.

It looks related to marking the widgets to be rebuilt while rebuilding is happening.

Flutter doctor

[✓] Flutter (on Linux, channel alpha)
    • Flutter at /home/dakunesu/Downloads/dev/git/flutter/flutter
    • Framework revision a9584e1214 (4 days ago), 
    • Engine revision a8b7631b7a
    • Tools Dart version 1.21.0-dev.11.0

[✓] Android toolchain - develop for Android devices (Android SDK 24.0.1)
    • Android SDK at /home/dakunesu/Downloads/dev_tools/android_sdk/android-sdk-linux
    • Platform android-24, build-tools 24.0.1
    • ANDROID_HOME = /home/dakunesu/Downloads/dev_tools/android_sdk/android-sdk-linux
    • OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-0ubuntu4~12.04-b14)

[x] Flutter IDE Support (No supported IDEs installed)
    • IntelliJ - https://www.jetbrains.com/idea/

[✓] Connected devices
    • Nexus 6 • ZX1G229MZ5 • android-arm • Android 7.0 (API 24)
I/flutter (15628): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (15628): The following assertion was thrown building RawGestureDetector(state:
I/flutter (15628): RawGestureDetectorState(904065345; gestures: tap; behavior: opaque)):
I/flutter (15628): setState() or markNeedsBuild() called during build.
I/flutter (15628): This _OverlayEntry widget cannot be marked as needing to build because the framework is already in
I/flutter (15628): the process of building widgets. A widget can be marked as needing to be built during the build
I/flutter (15628): phase only if one of its ancestors is currently building. This exception is allowed because the
I/flutter (15628): framework builds parent widgets before children, which means a dirty descendant will always be
I/flutter (15628): built. Otherwise, the framework might not visit this widget during this build phase.
I/flutter (15628): The widget on which setState() or markNeedsBuild() was called was:
I/flutter (15628):   _OverlayEntry([GlobalKey 210877401]; state: _OverlayEntryState(474312280))
I/flutter (15628): The widget which was currently being built when the offending call was made was:
I/flutter (15628):   RawGestureDetector(state: RawGestureDetectorState(904065345; gestures: tap; behavior: opaque))
I/flutter (15628): 
I/flutter (15628): When the exception was thrown, this was the stack:
I/flutter (15628): #0      BuildableElement.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:2725:11)
I/flutter (15628): #2      BuildableElement.markNeedsBuild (package:flutter/src/widgets/framework.dart:2718:12)
I/flutter (15628): #3      State.setState (package:flutter/src/widgets/framework.dart:890:14)
I/flutter (15628): #4      _OverlayEntryState._markNeedsBuild (package:flutter/src/widgets/overlay.dart:174:5)
I/flutter (15628): #5      OverlayEntry.markNeedsBuild (package:flutter/src/widgets/overlay.dart:149:24)
I/flutter (15628): #6      _TooltipState.didUpdateConfig (package:flutter/src/material/tooltip.dart:122:14)
I/flutter (15628): #7      StatefulElement.update (package:flutter/src/widgets/framework.dart:3028:14)
I/flutter (15628): #8      Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #9      SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3850:14)
I/flutter (15628): #10     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #11     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3850:14)
I/flutter (15628): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #14     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #15     StatefulElement.update (package:flutter/src/widgets/framework.dart:3032:5)
I/flutter (15628): #16     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #17     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #18     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #19     StatelessElement.update (package:flutter/src/widgets/framework.dart:2951:5)
I/flutter (15628): #20     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #21     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #22     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #23     StatefulElement.update (package:flutter/src/widgets/framework.dart:3032:5)
I/flutter (15628): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #25     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #26     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #27     StatelessElement.update (package:flutter/src/widgets/framework.dart:2951:5)
I/flutter (15628): #28     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #29     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:3576:26)
I/flutter (15628): #30     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3949:17)
I/flutter (15628): #31     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #32     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #33     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #34     ProxyElement.update (package:flutter/src/widgets/framework.dart:3150:5)
I/flutter (15628): #35     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #36     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:3576:26)
I/flutter (15628): #37     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3949:17)
I/flutter (15628): #38     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #39     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3850:14)
I/flutter (15628): #40     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #41     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #42     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #43     ProxyElement.update (package:flutter/src/widgets/framework.dart:3150:5)
I/flutter (15628): #44     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #45     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #46     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #47     ProxyElement.update (package:flutter/src/widgets/framework.dart:3150:5)
I/flutter (15628): #48     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #49     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3850:14)
I/flutter (15628): #50     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #51     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3850:14)
I/flutter (15628): #52     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #53     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3850:14)
I/flutter (15628): #54     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #55     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #56     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #57     ProxyElement.update (package:flutter/src/widgets/framework.dart:3150:5)
I/flutter (15628): #58     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #59     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #60     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #61     StatefulElement.update (package:flutter/src/widgets/framework.dart:3032:5)
I/flutter (15628): #62     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #63     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3850:14)
I/flutter (15628): #64     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #65     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #66     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #67     StatelessElement.update (package:flutter/src/widgets/framework.dart:2951:5)
I/flutter (15628): #68     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #69     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3850:14)
I/flutter (15628): #70     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #71     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #72     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #73     StatelessElement.update (package:flutter/src/widgets/framework.dart:2951:5)
I/flutter (15628): #74     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #75     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:3850:14)
I/flutter (15628): #76     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #77     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #78     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #79     StatelessElement.update (package:flutter/src/widgets/framework.dart:2951:5)
I/flutter (15628): #80     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #81     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #82     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #83     StatefulElement.update (package:flutter/src/widgets/framework.dart:3032:5)
I/flutter (15628): #84     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #85     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #86     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #87     StatefulElement.update (package:flutter/src/widgets/framework.dart:3032:5)
I/flutter (15628): #88     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #89     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #90     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #91     ProxyElement.update (package:flutter/src/widgets/framework.dart:3150:5)
I/flutter (15628): #92     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #93     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #94     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #95     StatelessElement.update (package:flutter/src/widgets/framework.dart:2951:5)
I/flutter (15628): #96     Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #97     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:2907:16)
I/flutter (15628): #98     BuildableElement.rebuild (package:flutter/src/widgets/framework.dart:2784:5)
I/flutter (15628): #99     StatefulElement.update (package:flutter/src/widgets/framework.dart:3032:5)
I/flutter (15628): #100    Element.updateChild (package:flutter/src/widgets/framework.dart:2069:15)
I/flutter (15628): #101    _LayoutBuilderElement._layout.<anonymous closure> (package:flutter/src/widgets/layout_builder.dart:120:18)
I/flutter (15628): #102    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:1750:19)
I/flutter (15628): #103    _LayoutBuilderElement._layout (package:flutter/src/widgets/layout_builder.dart:108:11)
I/flutter (15628): #104    RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1834:58)
I/flutter (15628): #105    PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:975:15)
I/flutter (15628): #106    RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1834:13)
I/flutter (15628): #107    _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:207:5)
I/flutter (15628): #108    RenderObject.layout (package:flutter/src/rendering/object.dart:1736:21)
I/flutter (15628): #109    RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:261:13)
I/flutter (15628): #110    RenderObject.layout (package:flutter/src/rendering/object.dart:1736:21)
I/flutter (15628): #111    MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:124:11)
I/flutter (15628): #112    _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:91:35)
I/flutter (15628): #113    MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:194:7)
I/flutter (15628): #114    RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:338:14)
I/flutter (15628): #115    RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1612:21)
I/flutter (15628): #116    PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:953:18)
I/flutter (15628): #117    BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding.beginFrame (package:flutter/src/rendering/binding.dart:220:19)
I/flutter (15628): #118    BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding&WidgetsBinding.beginFrame (package:flutter/src/widgets/binding.dart:314:23)
I/flutter (15628): #119    BindingBase&SchedulerBinding&GestureBinding&ServicesBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:165:5)
I/flutter (15628): #120    BindingBase&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:653:15)
I/flutter (15628): #121    BindingBase&SchedulerBinding.handleBeginFrame (package:flutter/src/scheduler/binding.dart:588:9)
I/flutter (15628): #122    _beginFrame (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:83)
I/flutter (15628): (elided one frame from class _AssertionError)
I/flutter (15628): ════════════════════════════════════════════════════════════════════════════════════════════════════
Application finished.

Metadata

Metadata

Assignees

Labels

c: crashStack traces logged to the consoleframeworkflutter/packages/flutter repository. See also f: labels.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions