Flutter. Несколько героев используют один и тот же тег. ListView с кнопками

#flutter #listview #dart #gesturedetector

#flutter #listview #dart #gesturedetector

Вопрос:

Не могу понять, как решить эту проблему. Итак, вот простейший код, который представляет мою проблему:

    Scaffold(
      body: Stack(
        children: <Widget>[
          ...
          Scrollbar(
            child: ListView.builder(
              primary: false,
              shrinkWrap: true,
              itemCount: _mapBloc?.mapData?.companies?.count ?? 0,
              itemBuilder: (context, index) {
                final company = _mapBloc?.mapData?.companies?.data[index];
                return InkWell(
                  child: Hero(
                    tag: company.id,
                    child: Card(
                      child: Container(
                        height: 50,
                        width: double.infinity,
                      ),
                    ),
                  ),
                  onTap: () {
                    Navigator.of(context)
                        .pushNamed('/company', arguments: company)
                        .then(
                      (results) {
                        if (results is PopWithResults) {
                          PopWithResults popResult = results;
                        }
                      },
                    );
                  },
                );
              },
            ),
          )
        ],
      ),
    );
  

И трассировка стека:

 The following assertion was thrown during a scheduler callback:
There are multiple heroes that share the same tag within a subtree.
Within each subtree for which heroes are to be animated (i.e. a PageRoute subtree), each Hero must
have a unique non-null tag.
...
  

Количество элементов в ListView меняется с каждым запросом к базе данных. Если размер до 5 виджетов в ListView, то нажатие работает правильно, как только список расширяется, например, до 8 элементов, я получаю ошибку, написанную выше. С чем это может быть связано? Я пытался использовать уникальные теги героев, но это не решает проблему.

Мне нужен совет, и я надеюсь, что вы сможете мне помочь. Если вам нужна дополнительная информация, пожалуйста, напишите комментарий.

Спасибо за ваше внимание!

Комментарии:

1. У вас есть несколько компаний, которые имеют одинаковый тег id ? tag: company.id, должно быть уникальным, поэтому в вашем списке не должно быть двух одинаковых компаний id . Это требование виджета Hero. И обратите внимание, он должен быть уникальным не только в этом конкретном ListView, но и во всем текущем экране (возможно, в вашем эшафоте). Используете ли вы другой виджет героя где-нибудь еще в своем коде?

2. Спасибо за ваш ответ! Решение было в другом виджете героя без тега, о котором я просто забыл.