gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:44:58 25 4
gpt4 key购买 nike

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

这是我的类(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com