【问题标题】:Black Screen in flutter when navigated to different page using gesturedetector in flutter. Says multiple heros share same tag使用颤动中的手势检测器导航到不同页面时颤动中的黑屏。说多个英雄共享同一个标签
【发布时间】:2019-12-27 14:50:11
【问题描述】:

我正在构建一个应用程序,其中 Home ui 看起来像网格,当点击网格的单个图块时,用户将被导航到另一个页面。但每当它发生时,就会抛出一个错误。这是不查看语法错误的代码。 我没有使用任何英雄小部件。虽然我得到了这个错误..

     body: Container(
       child: GridView.count(
         crossAxisCount: 2,
         children: <Widget>[ 
           Card(
             child: InkWell(
               onTap: (){
                 print('tapped pnemonia');
                 Navigator.push(context, MaterialPageRoute(builder: (context)=> diagnosis()));
               },
               child: Center(
                 child: Column(
                   children: <Widget>[
                     Text('Pnemonia'),
                     Image.asset('assets/images/lungs.jpg'),
                   ],
                 ),
               ),
             ),
           ),
         ],
       ),
     ),
    );
  }
}

输出错误如下:


I/flutter ( 6827): ├# Here is the subtree for one of the offending heroes: Hero
I/flutter ( 6827):
I/flutter ( 6827): When the exception was thrown, this was the stack:
I/flutter ( 6827): #0      Hero._allHeroesFor.inviteHero.<anonymous closure> (package:flutter/src/widgets/heroes.dart:265:11)
I/flutter ( 6827): #1      Hero._allHeroesFor.inviteHero (package:flutter/src/widgets/heroes.dart:276:8)
I/flutter ( 6827): #2      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:295:21)
I/flutter ( 6827): #3      SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:5433:14)
I/flutter ( 6827): #4      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #5      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #6      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #7      SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:5433:14)
I/flutter ( 6827): #8      Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #9      MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:5534:16)
I/flutter ( 6827): #10     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #11     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:5433:14)
I/flutter ( 6827): #12     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #13     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #14     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #15     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:5433:14)
I/flutter ( 6827): #16     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #17     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #18     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #19     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:5534:16)
I/flutter ( 6827): #20     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #21     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #22     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #23     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #24     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #25     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #26     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #27     MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:5534:16)
I/flutter ( 6827): #28     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #29     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #30     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #31     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #32     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #33     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #34     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #35     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:5433:14)
I/flutter ( 6827): #36     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #37     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #38     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #39     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:5433:14)
I/flutter ( 6827): #40     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #41     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #42     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #43     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #44     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #45     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #46     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): #47     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4272:14)
I/flutter ( 6827): #48     Hero._allHeroesFor.visitor (package:flutter/src/widgets/heroes.dart:308:15)
I/flutter ( 6827): (elided 3 frames from package dart:async)
I/flutter ( 6827): 
I/flutter ( 6827): Another exception was thrown: There are multiple heroes that share the same tag within a subtree.

这是我运行构建时出现的错误。

【问题讨论】:

  • 您能否在使用hero 小部件、使用NavigatorGesture detector 的地方发布更多代码?
  • 我更新了代码。现在完成了
  • 我没有看到任何手势检测器或英雄小部件在任何地方使用..
  • 这就是问题所在。我不知道问题出在哪里,但我认为它在 card() 中
  • 你能从一开始就发布所有日志,以便我们验证 Hero 小部件的源位置吗?如果太久可能不在这里。

标签: android flutter dart navigation flutter-layout


【解决方案1】:

当您尝试在一个小部件中使用多个FloatingActionButtons 时,可能会出现错误multiple heroes on one route can't have the same tag

根据FloatingActionButtonheroTag的文档:

要应用于按钮的 Hero 小部件的标签。

默认为与其他浮动操作按钮匹配的标记。

如果您不想要浮动操作,请将其显式设置为 null 按钮有一个英雄标签。

如果没有明确设置,那么只能有一个 每个路由(即每个屏幕)的 FloatingActionButton,否则 会有标签冲突(一条路线上的多个英雄不能有 相同的标签)。材料设计规范建议仅使用 每个屏幕一个浮动操作按钮。

要解决您的异常并在单个小部件中使用多个 FAB,请确保在 FAB 中为 heroTag 传递 Unique 对象/值/字符串。

注意:如果您不将值传递给heroTag,它会创建一个默认值&lt;default FloatingActionButton tag&gt;。这对所有 FAB 来说都很常见。因此,如果它们在同一个小部件中,它们将使用重复的 heroTag,这会引发异常。

如果您有任何疑问,请告诉我。

【讨论】:

    【解决方案2】:

    可能已经晚了,但是,如果您仍然感到困惑。我通过在 FloatingActionButtons 中手动添加新属性 heroTag 解决了我的问题。

    @override
      Widget build(BuildContext context) {
        return Row(
          mainAxisAlignment: MainAxisAlignment.end,
          children: <Widget>[
            FloatingActionButton(
              heroTag: 1, // put something different with this
                onPressed: (){
                  counterBloc.add(CounterEvent.increment);
                },
              child: Icon(Icons.add),
            ),
            FloatingActionButton(
              heroTag: 2, // put something different with this
              onPressed: (){
                counterBloc.add(CounterEvent.decrement);
              },
              child: Icon(Icons.remove),
            ),
          ],
        );
      }
    

    希望对某人有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 2020-06-21
      • 2020-09-14
      • 2021-09-14
      • 2021-07-18
      相关资源
      最近更新 更多