как дважды использовать hero с одним и тем же тегом на одном экране?

#flutter #dart

#flutter #dart

Вопрос:

У меня есть 2 горизонтальных списка, список A (новые продукты) и список B (самые продаваемые), на одном экране. Каждый продукт из списка A также может быть в списке B. Это вкратце виджет продукта.

 Column(
      children: [
        Hero(
          tag: product.id,
          child: Image.asset('images/product.jpg'),
        ),
        Text(${product.name)
      ],
    );
  

предположим, что продукт находится в списке A и списке B, и я хочу использовать виджет hero, как это сделать? потому что я попробовал, и это выдало мне ошибку

 There are multiple heroes that share the same tag within a subtree.
  

Я был бы очень признателен за вашу помощь!

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

1. Hero Виджет предназначен для обеспечения анимации перехода между тем, что в противном случае было бы двумя разными виджетами на двух разных экранах. Вы не можете Hero одновременно отображать два виджета с одним и тем же ключом на одном экране, и я не уверен, зачем вам это нужно.

Ответ №1:

Я не совсем понял, о чем вы спрашиваете, но, глядя на ошибку, я могу только предложить вам присвоить вашему тегу Hero значение как product.name что позволит устранить вашу ошибку. По сути, вы не можете применить одно и то же имя тега ко всем элементам списка с помощью виджета hero, поскольку оно должно быть уникальным, я также столкнулся с той же ошибкой и решил ее, указав значение тега в качестве имени изображения.

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

1. да, у каждого продукта есть уникальный идентификатор, но я хочу, чтобы один и тот же продукт был в двух разных списках

2. @AliAlqallaf В этом случае вы можете добавить значение своего тега product.name с _list1 для первого ListView и _list2 для второго или любой дополнительной строки, которая вам может понадобиться. Возможно, это не тот ответ, который вы ищете, но это может решить вашу проблему.

Ответ №2:

Вы можете добавить «new» и «most_selling» к своим тегам, таким образом, у вас может быть один и тот же элемент в обоих списках с 2 разными тегами

т.е. Список A (пункт 1):

 Hero(
   tag: "item_1_new",
   child: //
),
  

Список B (пункт 1):

 Hero(
   tag: "item_1_most_selling",
   child: //
),
  

Ответ №3:

Если вы пытаетесь придать виджетам анимацию героя без навигации, я думаю, этот пакет может вам помочь: https://pub.dev/packages/local_hero