在列表中添加新项目会删除旧项目

时间:2019-12-25 13:52:06

标签: flutter dart

您好Flutter专家

我是新手,很喜欢编写代码。我遇到一个奇怪的问题:将项目添加到项目列表时,旧项目被覆盖,但计数正确。例如,我添加(名称:电话,数量:1,价格:99.99)的结果是相同的,但是当我添加(名称:衬衫,数量:2,价格:49.99)时的结果是

  1. (名称:衬衫,数量:2,价格:49.99)
  2. (名称:衬衫,数量:2,价格:49.99)

所以第一条记录不见了。

请检查下面的代码段。

您能告诉我我在做什么错吗?

谢谢, -空

List<ParcelItem> parcelItems = List<ParcelItem>();

void addParcelItem(ParcelItem pi ){
  parcelItems.add(pi);
}
Widget getItemList(){

List<Widget> widgetItems = List<Widget>();
for(ParcelItem itm in parcelItems){

  Widget widgetItem = Column(
    children: <Widget>[
      Text(itm.name),
      Text(itm.description),
      Text(itm.quantity.toString()),
      Text(itm.price.toString()),
    ],
  );
  widgetItems.add(widgetItem);
}
if(widgetItems != null){
  return Column(
    children: widgetItems,
  );
}else{
  return Text('Add some items', style: kInstructionText,);
}

}

2 个答案:

答案 0 :(得分:0)

好的,我找到了问题并解决了!

“ void addParcelItem(ParcelItem pi)” pi是对变量的引用,该变量已初始化一次,并再次被使用n次。 Dart再次向同一变量添加了一个引用,因此再次删除了旧数据,但向列表中添加了两次。我在将项目添加到列表时通过创建ParcelItem对象来修复它。

谢谢你们的帮助

已删除

答案 1 :(得分:-1)

请尝试以下代码,而不要返回Column

 return ListView(
                    children: widgetItems.map((element) {
                      return element;
                    }).toList(),
                  ),

基本上,问题似乎在于您只返回了一个Column,而并非全部出现在widgetItems