Flutter. Multiple heroes share same tag. ListView with buttons

Viewed 376

Can't figure it out how to solve this problem. So, here is the simplest code which represents my problem:

   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;
                        }
                      },
                    );
                  },
                );
              },
            ),
          )
        ],
      ),
    );

And stack trace:

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.
...

The items count in ListView changes with every database request. If the size is up to 5 widgets in ListView, then clicking works correctly, as soon as the list expands to, for example, 8 elements, I get the error written above. With what it can be connected? I tried to use unique Hero tags, but this does not solve the problem.

I need some advice and hope you can help me. If you need more information, please, write the comment.

Thanks for your attention!

0 Answers
Related