Skip to content

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

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.

Activity

  1. added
    frameworkflutter/packages/flutter repository. See also f: labels.
    c: crashStack traces logged to the console
    on Dec 5, 2016
  2. eseidelGoogle commented on Dec 5, 2016

    @eseidelGoogle
    Contributor

    @Hixie or @HansMuller are the right folks to ask.

  3. bit-garden commented on Dec 11, 2016

    @bit-garden
    Author

    Small update. The crash doesn't happen when ran in --profile or --release mode. The assertion is the only thing making it show up in debug.

  4. self-assigned this
    on Jan 4, 2017
  5. added a commit that references this issue on Jan 5, 2017
    86e5fce
  6. github-actions commented on Sep 5, 2021

    @github-actions

    This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

  7. locked as resolved and limited conversation to collaborators on Sep 5, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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