【问题标题】:how to use hero twice with the same tag in the same screen?如何在同一个屏幕上两次使用相同标签的英雄?
【发布时间】:2020-10-06 19:37:04
【问题描述】:

我在一个屏幕上有 2 个水平列表,列表 A(新产品)和列表 B(最畅销)。列表 A 的每个产品也可以在列表 B 中。这就是产品小部件。

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

假设一个产品在列表A和列表B中,我想使用英雄小部件,怎么做?因为我试过了,它给了我一个错误

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

非常感谢您的帮助!

【问题讨论】:

  • Hero 小部件用于在两个不同屏幕上的两个不同小部件之间提供过渡动画。您不能在同一屏幕上同时显示具有相同键的两个 Hero 小部件,我不确定您为什么要这样做。

标签: flutter dart


【解决方案1】:

我没有完全理解你在问什么,但在查看错误时,我只能建议你给你的英雄标签一个值作为 product.name 来解决你的错误。 基本上你不能对每个带有 hero 小部件的列表项应用相同的标签名称,因为它应该是唯一的,我也遇到了同样的错误,我通过将标签值作为图像名称来解决它。

【讨论】:

  • 是的,每个产品都有一个唯一的 id,但我想要的是在两个不同的列表中拥有相同的产品
  • @AliAlqa​​llaf 在这种情况下,您可以将标签值 product.name 附加到第一个 ListView 的 _list1 和第二个的 _list2 或您可能想要的任何其他字符串。这可能不是您正在寻找的答案,但这可能会解决您的问题。
【解决方案2】:

您可以将“新”和“最畅销”附加到您的标签,这样您就可以在两个列表中使用 2 个不同的标签来拥有相同的商品

即 清单 A(第 1 项):

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

列表 B(第 1 项):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2020-02-13
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多