flutter列表和provider如何在列表中增加一个int值?

kyxcudwk  于 2023-06-24  发布在  Flutter
关注(0)|答案(2)|浏览(136)

我使用Listview.builder来构建一个按钮列表,该列表基于包含在变更通知程序中的列表中的信息。以下是列表中包含的项目的示例:

ListItem(cost1: 2, cost2: 0, canSelect: 1, timesChosen: 0, name: 'Item 1'),

下面是listview.builder中构建的对象(button)的示例:

ListView.builder(
                  itemBuilder: (context, index) {
                    return InkWell(
                      onTap: () {
                        context.read<MyProvider>().MyList[index].timesChosen++;
                      },
                      child: EquipmentButton(
                          text: context.read<MyProvider>().MyList[index].name,
                          Cost1: '${context.read<MyProvider>().MyList[index].cost1}',
                          timesChosen: '${context.read<MyProvider>().MyList[index].timesChosen}',
                     ),
                    );
                  },
                  itemCount: context.read<MyProvider>().MyList.length),

当我运行这段代码时,它正确地构建了按钮。但是当一个按钮被按下时,我会得到下面的错误:类“ListItem”没有示例setter“timesChosen =”。Receiver:'ListItem'的示例已尝试调用:timesChosen=1
如何让它增加列表中timesChosen的值?
非常感谢

7y4bm7vi

7y4bm7vi1#

这里的问题是,您试图使用timesChosen++表达式更新ListItem示例的timesChosen属性,该表达式假定存在该属性的setter。要使代码正常工作,应确保ListItem类具有timesChosen属性的setter方法。下面是setter的一个例子:

class ListItem {
  int cost1;
  int cost2;
  int canSelect;
  int _timesChosen; // hold the value of timesChosen

  String name;

  // Getter for timesChosen
  int get timesChosen => _timesChosen;

  // Setter for timesChosen
  set timesChosen(int value) {
    _timesChosen = value;
  }

  ListItem(this._timesChosen, {required this.cost1, required this.cost2, required this.canSelect, required this.name});
}

上面的代码片段应该可以与listview中的代码一起使用。

qyyhg6bp

qyyhg6bp2#

想明白了我只需要在Listitem类中添加一个void函数。

class EquipmentAndCosts {
  int cost1;
  int cost2;
  int canSelect;
  int timesChosen;
  String name;

  void timesChosenIncrease() {
    timesChosen++;
  }

  EquipmentAndCosts(
      {required this.name,
      required this.cost1,
      required this.cost2,
      required this.canSelect,
      required this.timesChosen});
}

相关问题