Skip to content

missing nullCheck #12068

Closed
Closed

Description

@JFixby
I: ══╡ EXCEPTION CAUGHT BY SCHEDULER LIBRARY ╞═════════════════════════════════════════════════════════
I: The following assertion was thrown during a scheduler callback:
I: There are multiple heroes that share the same tag within a subtree.
I: Within each subtree for which heroes are to be animated (typically a PageRoute subtree), each Hero
I: must have a unique non-null tag.
I: In this case, multiple heroes had the tag "Instance of 'Object'".
I: When the exception was thrown, this was the stack:
I: #0      Hero._allHeroesFor.visitor.<anonymous closure> (package:flutter/src/widgets/heroes.dart:114)
I: #2      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:112)
I: #3      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #4      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #5      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #6      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #7      MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4625)
I: #8      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #9      MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4625)
I: #10     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #11     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #12     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #13     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #14     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #15     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #16     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #17     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #18     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #19     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #20     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #21     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #22     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #23     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #24     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #25     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #26     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #27     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #28     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #29     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #30     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #31     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #32     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #33     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #34     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #35     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #36     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #37     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #38     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #39     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #40     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #41     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #42     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #43     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #44     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #45     List.forEach (dart:core-patch/growable_array.dart:267)
I: #46     SliverMultiBoxAdaptorElement.visitChildren (package:flutter/src/widgets/sliver.dart:866)
I: #47     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #48     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4625)
I: #49     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #50     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #51     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #52     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #53     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #54     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #55     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #56     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #57     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #58     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #59     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #60     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #61     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #62     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #63     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #64     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #65     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #66     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #67     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #68     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #69     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #70     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #71     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #72     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #73     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #74     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #75     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #76     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #77     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #78     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #79     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #80     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4625)
I: #81     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #82     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #83     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #84     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #85     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #86     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #87     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #88     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #89     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #90     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4525)
I: #91     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #92     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #93     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #94     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #95     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #96     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #97     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #98     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #99     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #100    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #101    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #102    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #103    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #104    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #105    Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:126)
I: #106    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3591)
I: #107    Element.visitChildElements (package:flutter/src/widgets/framework.dart:2634)
I: #108    Hero._allHeroesFor (package:flutter/src/widgets/heroes.dart:128)
I: #109    HeroController._startHeroTransition (package:flutter/src/widgets/heroes.dart:480)
I: #110    HeroController._maybeStartHeroTransition.<anonymous closure> (package:flutter/src/widgets/heroes.dart:462)
I: #111    BindingBase&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:713)
I: #112    BindingBase&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:657)
I: #113    _invoke (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:86)
I: #114    _drawFrame (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:75)
I: (elided one frame from class _AssertionError)

Activity

  1. Hixie commented on Sep 13, 2017

    @Hixie
    Contributor

    The given stack trace suggests there's an error in the code, not the framework. Without more details it's not clear what we can do here.

  2. added
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Sep 13, 2017
  3. JFixby commented on Sep 13, 2017

    @JFixby
    Author

    You can make the exception more detailed. Now it says "Something happened somewhere' which is not very informative.

  4. JFixby commented on Sep 13, 2017

    @JFixby
    Author

    There is no reference at all to the app code in the stack trace, so this looks like framework problem.

  5. Hixie commented on Sep 13, 2017

    @Hixie
    Contributor

    I don't know how we could really point you to the right place. We do say "here are multiple heroes that share the same tag within a subtree" and print the offending tag (in this case an object without a useful toString unfortunately).

    What information can we give you that would help here? I'm eager to give you anything you can use...

  6. JFixby commented on Sep 13, 2017

    @JFixby
    Author

    First fix the constructor:

    const FloatingActionButton({
    ...
        this.heroTag,
    ...
    
    • mark heroTag as @required
    • add null check and empty string check on it

    Step two is to add details to the exception:

    • what was the conflicting tag?
    • what are the instances having the same tag? Add detailed .toString() to them and print out their path in the widget tree.
  7. Hixie commented on Sep 13, 2017

    @Hixie
    Contributor

    Why would FloatingActionButton's hero tag be required? I don't understand.

    The conflicting tag is printed in the logs already. The tags in your case are Object instances so they don't have useful toStrings.

    We can try to print the Hero widget itself; I'm not sure how useful that would be in practice. Let me post a patch to do that.

  8. added
    frameworkflutter/packages/flutter repository. See also f: labels.
    and removed
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Sep 13, 2017
  9. added this to the 3: Current Milestone milestone on Sep 13, 2017
  10. self-assigned this
    on Sep 13, 2017
  11. JFixby commented on Sep 13, 2017

    @JFixby
    Author

    Hero tag must be required because framework exception above says ... each Hero must have a unique non-null tag.

    I have no idea what is heroTag, why it is required and why it has to be unique. Also I don't know what is "Instance of 'Object'".

    I can assume that FloatingActionButton constructor swallows default null heroTag and doesn't complain by throwing exception about it. From this point the framework becomes a schrödinger cat. The null circulates somewhere in the framework and gives the mysterious stack-trace above.

  12. Hixie commented on Sep 13, 2017

    @Hixie
    Contributor

    I don't understand why we are talking about FloatingActionButton. Can you elaborate? What makes you think FloatingActionButton is relevant here?

  13. Hixie commented on Sep 13, 2017

    @Hixie
    Contributor

    Oh, wait, are you trying to use two FloatingActionButtons on the screen at once?

    I'll post a patch to allow you to set the heroTag to null so that you can do that. In the meantime, you can just set heroTag to a different value on each FloatingActionButton if you want to do that. Generally speaking having multiple FloatingActionButtons on the screen is considered bad UI.

  14. Hixie commented on Sep 13, 2017

    @Hixie
    Contributor
  15. 2 remaining items

  16. added a commit that references this issue on Sep 11, 2019
  17. added a commit that references this issue on Sep 12, 2019
  18. added a commit that references this issue on Sep 12, 2019
  19. added a commit that references this issue on Sep 13, 2019
  20. added a commit that references this issue on Sep 13, 2019
  21. github-actions commented on Sep 4, 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.

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

Metadata

Metadata

Assignees

Labels

frameworkflutter/packages/flutter repository. See also f: labels.

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions