将一些列表 B 作为项目放入列表 A,然后清除列表 B 和列表 A 也消失了



我在这里编码时有 2 个列表。

List<Detail> orderDetailList = List();
List<List> allOrders = List();
var result;
String tmpCustomerName;

我的数据以json的形式来自我的数据库,这是我的一些代码。

await Dio().get(myURL).then((value) async {result = json.decode(value.data)});
for (var item in result) {
OrdersDetailModel ordersDetailModel = OrdersDetailModel.fromJson(item);
setState(() {
orders.add(ordersDetailModel);
customerName = ordersDetailModel.customerName;
customerPhone = ordersDetailModel.customerPhone;
var res2 = json.decode(ordersDetailModel.orderDetail);
for (var item2 in res2) {
Detail detail = Detail.fromJson(item2);
orderDetailList.add(detail);
}
allOrders.add(orderDetailList);
print('before $allOrders');
if (tmpCustomerName != customerName) {
orderDetailList.clear();
print('after $allOrders');
}
tmpCustomerName = customerName;
});
}

正如我在问题部分提到的,当我在将其添加到 allOrders 后使用orderDetailList.clear()时,allOrders 中的值也消失了,因此 allOrders 只有空列表,如您所见,我打印了"之前"和"之后","之前"有价值,但"之后"没有。我做错了什么?或者,在清除订单详细信息列表后,如何将值保留在我的所有订单列表中?

这是referencing error的明显情况,你正在做。有一个概念叫做ShallowDeep副本。

  • :它复制项目,但具有父项目的一些引用。因此,当对其中任何一个进行任何更改时,都会对另一个项目进行更改。你现在正在做什么
  • 深层复制:这是复制方法,其中没有对父变量的引用。我们必须做的

因此,让我们快速跳入代码:

// rather than doing add directly from orderDetailsList
// we  add the data to the tempList holding the Details list, 
// and then add it to the data
for (var item2 in res2) {
Detail detail = Detail.fromJson(item2);
orderDetailList.add(detail);
}

// this will keep the data into the list
List<Detail> tempList = [];

// traversing the item from orderDetailsList
orderDetailList.forEach((item) => tempList.add(item));
// here you add the tempList now holding the data
allOrders.add(tempList);

阅读有关 List.forEach() 的信息。它将为您提供有关该方法的一些概念清晰度。

相关内容

  • 没有找到相关文章

最新更新