Есть несколько героев, которые имеют один и тот же тег в поддереве - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь перейти с одного экрана на другой по маршруту. Когда я нажимаю кнопку, чтобы страница переместилась на маршрут при условии, что я получаю ошибку

I/flutter ( 8790): Another exception was thrown: There are multiple heroes that share the same tag within a subtree.

Вот код:

Маршруты:

 <String, WidgetBuilder>{
    '/first':(BuildContext context) =>NavigatorOne() ,
    '/second':(BuildContext context) =>NavigatorTwo(),
    '/third':(BuildContext context) =>NavigatorThree(),

  },

Navigator.of(context).pushNamed('/first');
Navigator.of(context).pushNamed('/second');
Navigator.of(context).pushNamed('/third');

class NavigatorOne extends StatefulWidget {
  @override
  _NavigatorOneState createState() =>  _NavigatorOneState();
}

class _NavigatorOneState extends State<NavigatorOne> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(

      appBar: AppBar(),
      body: Container(
      color: Colors.green,
      child: RaisedButton(child: Text(' one 1'),onPressed: (){
        Navigator.of(context).pushNamed('/second');
      },),
    ),
    ); 
  }
}

и ошибка:

══╡ EXCEPTION CAUGHT BY SCHEDULER LIBRARY ╞═════════════════════════════════════════════════════════ I/flutter (21786): The following assertion was thrown during a scheduler callback: I/flutter (21786): There are multiple heroes that share the same tag within a subtree. I/flutter (21786): Within each subtree for which heroes are to be animated (typically a PageRoute subtree), each Hero I/flutter (21786): must have a unique non-null tag. I/flutter (21786): In this case, multiple heroes had the following tag: <default FloatingActionButton tag>

Как мне решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 23 января 2019

У меня была та же проблема, я решил ее, закрыв код Visual Studio, а затем открыв и запустив проект

0 голосов
/ 31 июля 2019

Только для читателей в будущем:

в комментарии к @ m.vincent, причина этой ошибки для меня в том, что я использовал Hero внутри SliverChildBuilderDelegate, который (очевидно) имеет индекс, поэтому я использовал индекс с тегом типа 'tag$index' вот так

SliverChildBuilderDelegate(
    (BuildContext context, int index) {
      return Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            Hero(
              tag: 'tagImage$index',
              child: Image.asset(
                'image source here',
              ),
            ),

ПРИМЕЧАНИЕ: это может произойти с любым виджетом с дочерними индексами, такими как ListView.Builder

0 голосов
/ 16 июля 2018

Я сталкивался с этим раньше, и это было потому, что у меня было две кнопки FloatingAction на одном экране, мне пришлось добавить свойство heroTag + значение для FLoatingActionButton, чтобы ошибка исчезла.

Пример:

new FloatingActionButton(
    heroTag: "btn1",
    ...
)

new FloatingActionButton(
    heroTag: "btn2",
    ...
)

Из предоставленного вами примера кода не видно, что у вас есть FloatingActionButton, но из-за ошибки он, кажется, ссылается на нее:

I / flutter (21786): в этом случае у нескольких героев был следующий тег: тег FloatingActionButton по умолчанию

Возможно, вы использовали его на странице, по которой переходили, и затем вызвали ошибку.

В любом случае, надеюсь, что это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...