list - Dart : how can I change the value of a class property in a list of Classes

标签 list class flutter dart

你好,当一个类是类列表的一部分时,我无法理解如何管理该类的属性

这是我的类(class)

class BasketItem {
  final String itemDescription;
  final String itemNote;

  BasketItem(
      {this.itemDescription,
      this.itemNote});
}

class AppData {
  static final AppData _appData = new AppData._internal();

  List<BasketItem> basketList = [];
  factory AppData() {
    return _appData;
  }
  AppData._internal();
}

final appData = AppData();

这是我的 list

List<Container> _buildBasketList() {
    return appData.basketList.map((bList) {
      var container = Container(
        child: Builder(
          builder: (context) => Dismissible(
            key: Key(UniqueKey().toString()),
            background: Container(
              margin: EdgeInsets.all(8.0),
              color: kColorAccent,
              child: Align(
                  alignment: Alignment(-0.90, 0.00),
                  child: Icon(Icons.add_comment)),
            ),
            onDismissed: (direction) {
                final newItemToAdd = BasketItem(
                    itemDescription: bList.itemDescription,
                    itemNote: 'xxxxx',);

                appData.basketList.add(newItemToAdd);

                setState(() {});
                appData.basketList.remove(bList);

            },
            child: Stack(...)
          ),
        ),
      );
      return container;
    }).toList();
  }

我想执行以下操作:当 onDismissed 被执行时,我想将属性 itemNote 修改为“xxxxx”。我该怎么做?目前我删除了我刷过的 BasketItem 并创建了一个新的 BasketItem 并将其添加到列表中。问题是这似乎效率不高,它还在列表的末尾添加了项目,而我想将它保持在原来的位置/索引。

谢谢

最佳答案

方法一

使 BasketItem 中的字段成为非最终字段。所以你可以修改它们。

class BasketItem {
  final String itemDescription;
  /*final*/ String itemNote;

  BasketItem(
      {this.itemDescription,
      this.itemNote});
}
// onDismissed will change itemNote.
....
    onDismissed: (direction) {
                setState(() {
                  bList.itemNote = 'xxxxx';
                });
            },
...

方法二

内联替换列表内容。不要删除和添加


List<Container> _buildBasketList() {
    return appData.basketList.asMap().map((index, bList) {
      var container = Container(
        child: Builder(
          builder: (context) => Dismissible(
            key: Key(UniqueKey().toString()),
            background: Container(
              margin: EdgeInsets.all(8.0),
              color: kColorAccent,
              child: Align(
                  alignment: Alignment(-0.90, 0.00),
                  child: Icon(Icons.add_comment)),
            ),
            onDismissed: (direction) {
                setState(() {
                  appData.basketList[index] = BasketItem(
                    itemDescription: bList.itemDescription,
                    itemNote: 'xxxxx',);
                });
            },
            child: Stack(...)
          ),
        ),
      );
      return container;
    }).toList();
  }

关于list - Dart : how can I change the value of a class property in a list of Classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58146535/

相关文章:

python - 如何将列表与数据框列标题进行比较并替换标题名称?

python - 如何加速 Eratosthenes python 列表生成器的筛选

c# - 在彼此中实例化两个类中的每一个

c# - 使用带有 switch 语句的组合框 C#

flutter - viewportFraction < 1.0 的 PageView 非居中对齐

css - 在纯 css 中模拟 div 内的两个列表

r - 将向量添加到 R 列表中子列出的每个数据帧

java - Android 中的类(class)和 Activity

android - 如何在 flutter 中使用for循环?

flutter - 如何让黄色容器扩展并填充其紫色 parent 可用的其余空间