Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PointerExit bug/crash. [p0] #114

Open
luigi-rosso opened this issue May 3, 2019 · 1 comment
Open

PointerExit bug/crash. [p0] #114

luigi-rosso opened this issue May 3, 2019 · 1 comment

Comments

@luigi-rosso
Copy link
Contributor

This one's only happening in the demo branch, only when using a mouse. It happens if your cursor was over one of the characters and the inactivity timeout pops you back to the welcome screen. The stack seems to suggest that in the process of detaching, the Listener fires the onPointerExit callback. We call setState when that happens, which causes this error. The error message, however, mentions that we are in a build phase...either way, is there a good way to detect either condition and avoid calling setState, or is there something more fundamental going on here?

This ends up putting the demo in an unrecoverable state.

I/flutter ( 6197): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 6197): The following assertion was thrown building Overlay-[LabeledGlobalKey<OverlayState>#e7924](state:
I/flutter ( 6197): OverlayState#1e814(tickers: tracking 0 tickers, entries: [OverlayEntry#56a87(opaque: false;
I/flutter ( 6197): maintainState: false), OverlayEntry#e61e6(opaque: false; maintainState: true),
I/flutter ( 6197): OverlayEntry#5b713(opaque: true; maintainState: false), OverlayEntry#5be4e(opaque: false;
I/flutter ( 6197): maintainState: true)])):
I/flutter ( 6197): setState() or markNeedsBuild() called during build.
I/flutter ( 6197): This CharacterListItem widget cannot be marked as needing to build because the framework is already
I/flutter ( 6197): in the process of building widgets. A widget can be marked as needing to be built during the build
I/flutter ( 6197): phase only if one of its ancestors is currently building. This exception is allowed because the
I/flutter ( 6197): framework builds parent widgets before children, which means a dirty descendant will always be
I/flutter ( 6197): built. Otherwise, the framework might not visit this widget during this build phase.
I/flutter ( 6197): The widget on which setState() or markNeedsBuild() was called was:
I/flutter ( 6197):   CharacterListItem(state: _CharacterListItemState#9f280)
I/flutter ( 6197): The widget which was currently being built when the offending call was made was:
I/flutter ( 6197):   Overlay-[LabeledGlobalKey<OverlayState>#e7924](state: OverlayState#1e814(tickers: tracking 0
I/flutter ( 6197):   tickers, entries: [OverlayEntry#56a87(opaque: false; maintainState: false),
I/flutter ( 6197):   OverlayEntry#e61e6(opaque: false; maintainState: true), OverlayEntry#5b713(opaque: true;
I/flutter ( 6197):   maintainState: false), OverlayEntry#5be4e(opaque: false; maintainState: true)]))
I/flutter ( 6197):
I/flutter ( 6197): When the exception was thrown, this was the stack:
I/flutter ( 6197): #0      Element.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:3503:11)
I/flutter ( 6197): #1      Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:3529:6)
I/flutter ( 6197): #2      State.setState (package:flutter/src/widgets/framework.dart:1133:14)
I/flutter ( 6197): #3      _CharacterListItemState._stopPlaying (package:dev_rpg/src/game_screen/character_pool_page.dart:91:44)
I/flutter ( 6197): #4      MouseTracker.detachAnnotation (package:flutter/src/gestures/mouse_tracking.dart:125:20)
I/flutter ( 6197): #5      RenderPointerListener.detach (package:flutter/src/rendering/proxy_box.dart:2593:45)
I/flutter ( 6197): #6      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #7      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #8      _RenderSliverMultiBoxAdaptor&RenderSliver&ContainerRenderObjectMixin.detach (package:flutter/src/rendering/object.dart:3032:13)
I/flutter ( 6197): #9      RenderSliverMultiBoxAdaptor.detach (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:305:11)
I/flutter ( 6197): #10     _RenderSliverPadding&RenderSliver&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #11     _RenderViewportBase&RenderBox&ContainerRenderObjectMixin.detach (package:flutter/src/rendering/object.dart:3032:13)
I/flutter ( 6197): #12     RenderViewportBase.detach (package:flutter/src/rendering/viewport.dart:285:11)
I/flutter ( 6197): #13     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #14     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #15     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #16     RenderPointerListener.detach (package:flutter/src/rendering/proxy_box.dart:2595:11)
I/flutter ( 6197): #17     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #18     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #19     RenderPointerListener.detach (package:flutter/src/rendering/proxy_box.dart:2595:11)
I/flutter ( 6197): #20     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #21     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #22     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #23     RenderCustomPaint.detach (package:flutter/src/rendering/custom_paint.dart:496:11)
I/flutter ( 6197): #24     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #25     _RenderStack&RenderBox&ContainerRenderObjectMixin.detach (package:flutter/src/rendering/object.dart:3032:13)
I/flutter ( 6197): #26     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #27     _RenderFlex&RenderBox&ContainerRenderObjectMixin.detach (package:flutter/src/rendering/object.dart:3032:13)
I/flutter ( 6197): #28     _RenderCustomMultiChildLayoutBox&RenderBox&ContainerRenderObjectMixin.detach (package:flutter/src/rendering/object.dart:3032:13)
I/flutter ( 6197): #29     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #30     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #31     _RenderCustomClip.detach (package:flutter/src/rendering/proxy_box.dart:1189:11)
I/flutter ( 6197): #32     __RenderLayoutBuilder&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #33     __RenderLayoutBuilder&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #34     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #35     RenderPointerListener.detach (package:flutter/src/rendering/proxy_box.dart:2595:11)
I/flutter ( 6197): #36     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #37     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #38     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #39     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #40     RenderAnimatedOpacity.detach (package:flutter/src/rendering/proxy_box.dart:887:11)
I/flutter ( 6197): #41     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #42     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #43     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #44     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin.detach (package:flutter/src/rendering/object.dart:2774:14)
I/flutter ( 6197): #45     AbstractNode.dropChild (package:flutter/src/foundation/node.dart:147:13)
I/flutter ( 6197): #46     RenderObject.dropChild (package:flutter/src/rendering/object.dart:1169:11)
I/flutter ( 6197): #47     _RenderStack&RenderBox&ContainerRenderObjectMixin.remove (package:flutter/src/rendering/object.dart:2977:5)
I/flutter ( 6197): #48     MultiChildRenderObjectElement.removeChildRenderObject (package:flutter/src/widgets/framework.dart:4957:18)
I/flutter ( 6197): #49     RenderObjectElement.detachRenderObject (package:flutter/src/widgets/framework.dart:4744:36)
I/flutter ( 6197): #50     Element.detachRenderObject.<anonymous closure> (package:flutter/src/widgets/framework.dart:2867:13)
I/flutter ( 6197): #51     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3770:14)
I/flutter ( 6197): #52     Element.detachRenderObject (package:flutter/src/widgets/framework.dart:2866:5)
I/flutter ( 6197): #53     Element.detachRenderObject.<anonymous closure> (package:flutter/src/widgets/framework.dart:2867:13)
I/flutter ( 6197): #54     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3770:14)
I/flutter ( 6197): #55     Element.detachRenderObject (package:flutter/src/widgets/framework.dart:2866:5)
I/flutter ( 6197): #56     Element.detachRenderObject.<anonymous closure> (package:flutter/src/widgets/framework.dart:2867:13)
I/flutter ( 6197): #57     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3770:14)
I/flutter ( 6197): #58     Element.detachRenderObject (package:flutter/src/widgets/framework.dart:2866:5)
I/flutter ( 6197): #59     Element.deactivateChild (package:flutter/src/widgets/framework.dart:2996:11)
I/flutter ( 6197): #60     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4694:11)
I/flutter ( 6197): #61     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4992:17)
I/flutter ( 6197): #62     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter ( 6197): #63     _TheatreElement.update (package:flutter/src/widgets/overlay.dart:607:16)
I/flutter ( 6197): #64     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
I/flutter ( 6197): #65     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
I/flutter ( 6197): #66     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
I/flutter ( 6197): #67     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2278:33)
I/flutter ( 6197): #68     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:700:20)
I/flutter ( 6197): #69     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
I/flutter ( 6197): #70     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1012:15)
I/flutter ( 6197): #71     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:952:9)
I/flutter ( 6197): #72     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:864:5)
I/flutter ( 6197): #76     _invoke (dart:ui/hooks.dart:219:10)
I/flutter ( 6197): #77     _drawFrame (dart:ui/hooks.dart:178:3)
I/flutter ( 6197): (elided 3 frames from package dart:async)
I/flutter ( 6197): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 6197): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2276 pos 16: '!_dirtyElements[index]._active || _dirtyElements[index]._debugIsInScope(context)': is not true.
I/flutter ( 6197): Another exception was thrown: Navigator operation requested with a context that does not include a Navigator.
I/flutter ( 6197): Another exception was thrown: Navigator operation requested with a context that does not include a Navigator.
I/flutter ( 6197): Another exception was thrown: Navigator operation requested with a context that does not include a Navigator.
I/flutter ( 6197): Another exception was thrown: Navigator operation requested with a context that does not include a Navigator.
I/flutter ( 6197): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2276 pos 16: '!_dirtyElements[index]._active || _dirtyElements[index]._debugIsInScope(context)': is not true.
I/flutter ( 6197): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2276 pos 16: '!_dirtyElements[index]._active || _dirtyElements[index]._debugIsInScope(context)': is not true.
I/flutter ( 6197): Another exception was thrown: Duplicate GlobalKeys detected in widget tree.
@efortuna
Copy link
Collaborator

efortuna commented May 4, 2019

EEP. I suggest just fully removing the Listener class and not having this hover behavior. I ran into some weirdness with it when I was adding the live coding. There are definitely some bugs with hover to be filed, but we don't have time to fix them by I/O :-(

luigi-rosso added a commit that referenced this issue May 5, 2019
Remove hover logic as it was affecting issue #114.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants