Flutter Dart:如何更改类列表中类属性的值
Posted
技术标签:
【中文标题】Flutter Dart:如何更改类列表中类属性的值【英文标题】:Flutter Dart: how can I change the value of a class property in a list of Classes 【发布时间】:2020-01-28 11:42:16 【问题描述】:您好,当一个类是类列表的一部分时,我无法理解如何管理类的属性
这是我的课程
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<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 并将其添加到列表中。问题是这似乎效率不高,而且它还会将项目添加到列表的末尾,而我想将它保持在它所在的位置/索引处。
谢谢
【问题讨论】:
【参考方案1】:方法一
将BasketItem
中的字段设为非最终字段。所以你可以修改它们。
class BasketItem
final String itemDescription;
/*final*/ String itemNote;
BasketItem(
this.itemDescription,
this.itemNote);
// onDismissed will change itemNote.
....
onDismissed: (direction)
setState(()
bList.itemNote = 'xxxxx';
);
,
...
方法2
内联替换列表内容。不要删除和添加
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();
【讨论】:
以上是关于Flutter Dart:如何更改类列表中类属性的值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Dart/Flutter 中根据类标签和属性名称抓取数据
如何在 Flutter dart 的列表中的循环内附加数据?