【问题标题】:Flutter List Value Being Unintentionally UpdatedFlutter List 值被无意更新
【发布时间】:2019-12-23 16:35:08
【问题描述】:

在下面的代码中,“Second Sel Food Date”的打印日期应与“Initial Sel Food Date”匹配,但它们不匹配,因为“tempSelected[i].set_eatenDateTime = copyToDate.millisecondsSinceEpoch;”正在更新这两个列表。如何防止 foodListSelected 被更新? foodListSelected 的初始值正在使用流提供程序传递到类中,如果这很重要的话。

List<FoodModel> tempSelected = new List();

    for (var i = 0; i < foodListSelected.length; i++) {
      tempSelected.add(foodListSelected[i]);
    }

    for (var i = 0; i < tempSelected.length; i++) {

      print('Initital Sel Food Date: ' + DateFormat('E-MM-yyyy hh:mm:ss').format(DateTime.fromMillisecondsSinceEpoch(foodListSelected[i].eatenDateTime)));

      DateTime eatenDateTime = DateTime.fromMillisecondsSinceEpoch(tempSelected[i].eatenDateTime);
      DateTime copyToDate = DateTime(picked.year, picked.month, picked.day, eatenDateTime.hour, eatenDateTime.minute, eatenDateTime.second);

      // ISSUE!!!!!
      // This is some how setting foodListSelected[i].eatenDateTime as well.
      tempSelected[i].set_eatenDateTime = copyToDate.millisecondsSinceEpoch;


      tempSelected[i].set_selected = false;
      _createFood('eaten_food', tempSelected[i]);

    }
  }

  for (var i = 0; i < foodListSelected.length; i++) {
    print('Second Sel Food Date: ' + DateFormat('E-MM-yyyy hh:mm:ss').format(DateTime.fromMillisecondsSinceEpoch(foodListSelected[i].eatenDateTime)));
    foodListSelected[i].set_selected = false;
    _updateEatenFood(foodListSelected[i]);

  }

【问题讨论】:

    标签: list arraylist flutter dart


    【解决方案1】:

    您正在对两个列表中存在的同一个对象调用 mutator 方法。如果你想为第二个列表创建一个新的对象副本,你应该编写一个克隆当前对象的方法,并在你的第一个循环中使用它。

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2020-01-05
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多