【问题标题】:How to give different value for every dynamic list widget?如何为每个动态列表小部件赋予不同的价值?
【发布时间】:2019-03-20 05:10:55
【问题描述】:

我有一个基于后端项目计数的自定义小部件循环:

 _showPerItem(Item items) {
List<Widget> unitItems = <Widget>[];
for (var i = 0; i < items.data.length; i++) {
  unitItems.add(
    MenuList(
      menuName: '${items.data[i].name}',
      menuDescription: '${items.data[i].description}',
      price: 'Rp. ${items.data[i].price}',
      onPressed: () {
        widget.showModal(items.data[i]);
      },
    ),
  );
}

然后我希望 MenuList 具有可以添加或删除的整数计数,就像 fodd 订购应用程序一样。所以每个项目都有不同的项目计数值。

我尝试过使用 bloc,但只考虑改变的单个值。也许我可以使用 Map,但我想听听一些建议或更好的方法。谢谢!

【问题讨论】:

  • 您真正想要的是什么?从你的问题看不是很清楚。您想知道如何确定对象的唯一值吗?
  • @FilledStacks 是的,我想确定我的小部件在列表中的唯一值。

标签: dart flutter


【解决方案1】:

为此,您可以在所有对象上使用 dart 的 hasCode 属性。在模型中添加一个名为 hashCode 的属性,并从那里返回值的哈希值。您可以使用Quiver 来获取哈希帮助函数,如下所示。

int get hashCode => hash2(menuName.hashCode, price.hasCode);

hashCode 将是唯一的。如果您愿意,还可以在其中添加其他附加值,然后使用 hash3、4 等。

使用

将 quiver 导入您的模型
import 'package:quiver/core.dart';

更新:根据下面的@RandalSchwartz 评论,我想提一下,在获取hashCode 时,您应该使用不太可能相同的属性组合。

"hashCode 不保证为每个对象返回唯一值。如果两个对象“相等”,则它们必须具有相同的 hashCode,但反之则不成立。"

【讨论】:

  • 而是将哈希码添加到我的模型中,我们使用共享首选项怎么样? UI 看起来像这样的图片:grab.com/th/wp-content/uploads/sites/10/2017/11/…,所以我想在添加其他项目时使项目计数在该屏幕中保持不变
  • @antonovria 共享首选项用于将数据存储到磁盘,而不是用于确定唯一项目的价值。这是一个完全不同的问题,如果你想持久化数据,你可以使用共享首选项。
  • hashCode 不保证为每个对象返回唯一值。如果两个对象“相等”,则它们必须具有相同的 hashCode,但反之则不成立。
  • @RandalSchwartz 是的。我应该提到使用对象的唯一值来确定它的唯一哈希码。更新我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多